{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "source": [
    "import sys,os \n",
    "root_path = os.path.abspath('../')\n",
    "sys.path.append(root_path)\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import math\n",
    "from empyrical import alpha_beta, sharpe_ratio, max_drawdown, annual_return, tail_ratio\n",
    "from util.hw_util import *\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "hu = HwUtil()"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "init success!\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "source": [
    "from jqdatasdk import *\n",
    "auth('17784326770','Hw4865297.')\n"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "提示：当前环境 pandas 版本高于 0.25，get_price 与 get_fundamentals_continuously 接口 panel 参数将固定为 False\n",
      "注意：0.25 以上版本 pandas 不支持 panel，如使用该数据结构和相关函数请注意修改\n",
      "auth success \n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "source": [
    "get_concept_stocks(concept_code='SC0084',date='2021-09-09')"
   ],
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "['000027.XSHE',\n",
       " '000039.XSHE',\n",
       " '000065.XSHE',\n",
       " '000099.XSHE',\n",
       " '000155.XSHE',\n",
       " '000507.XSHE',\n",
       " '000539.XSHE',\n",
       " '000600.XSHE',\n",
       " '000631.XSHE',\n",
       " '000656.XSHE',\n",
       " '000690.XSHE',\n",
       " '000767.XSHE',\n",
       " '000791.XSHE',\n",
       " '000862.XSHE',\n",
       " '000875.XSHE',\n",
       " '000883.XSHE',\n",
       " '000922.XSHE',\n",
       " '000958.XSHE',\n",
       " '000966.XSHE',\n",
       " '000970.XSHE',\n",
       " '000993.XSHE',\n",
       " '001896.XSHE',\n",
       " '002009.XSHE',\n",
       " '002015.XSHE',\n",
       " '002053.XSHE',\n",
       " '002060.XSHE',\n",
       " '002080.XSHE',\n",
       " '002128.XSHE',\n",
       " '002130.XSHE',\n",
       " '002164.XSHE',\n",
       " '002184.XSHE',\n",
       " '002201.XSHE',\n",
       " '002202.XSHE',\n",
       " '002204.XSHE',\n",
       " '002226.XSHE',\n",
       " '002272.XSHE',\n",
       " '002309.XSHE',\n",
       " '002358.XSHE',\n",
       " '002451.XSHE',\n",
       " '002483.XSHE',\n",
       " '002487.XSHE',\n",
       " '002523.XSHE',\n",
       " '002531.XSHE',\n",
       " '002545.XSHE',\n",
       " '002564.XSHE',\n",
       " '002576.XSHE',\n",
       " '002595.XSHE',\n",
       " '002669.XSHE',\n",
       " '002689.XSHE',\n",
       " '002822.XSHE',\n",
       " '003035.XSHE',\n",
       " '300040.XSHE',\n",
       " '300095.XSHE',\n",
       " '300105.XSHE',\n",
       " '300129.XSHE',\n",
       " '300185.XSHE',\n",
       " '300187.XSHE',\n",
       " '300208.XSHE',\n",
       " '300274.XSHE',\n",
       " '300280.XSHE',\n",
       " '300421.XSHE',\n",
       " '300427.XSHE',\n",
       " '300443.XSHE',\n",
       " '300499.XSHE',\n",
       " '300569.XSHE',\n",
       " '300690.XSHE',\n",
       " '300712.XSHE',\n",
       " '300748.XSHE',\n",
       " '300772.XSHE',\n",
       " '300850.XSHE',\n",
       " '301040.XSHE',\n",
       " '600011.XSHG',\n",
       " '600021.XSHG',\n",
       " '600032.XSHG',\n",
       " '600089.XSHG',\n",
       " '600150.XSHG',\n",
       " '600163.XSHG',\n",
       " '600169.XSHG',\n",
       " '600192.XSHG',\n",
       " '600236.XSHG',\n",
       " '600290.XSHG',\n",
       " '600396.XSHG',\n",
       " '600416.XSHG',\n",
       " '600458.XSHG',\n",
       " '600483.XSHG',\n",
       " '600505.XSHG',\n",
       " '600540.XSHG',\n",
       " '600578.XSHG',\n",
       " '600642.XSHG',\n",
       " '600653.XSHG',\n",
       " '600744.XSHG',\n",
       " '600758.XSHG',\n",
       " '600764.XSHG',\n",
       " '600795.XSHG',\n",
       " '600818.XSHG',\n",
       " '600863.XSHG',\n",
       " '600875.XSHG',\n",
       " '600889.XSHG',\n",
       " '600905.XSHG',\n",
       " '600956.XSHG',\n",
       " '600968.XSHG',\n",
       " '601016.XSHG',\n",
       " '601177.XSHG',\n",
       " '601218.XSHG',\n",
       " '601226.XSHG',\n",
       " '601399.XSHG',\n",
       " '601608.XSHG',\n",
       " '601615.XSHG',\n",
       " '601619.XSHG',\n",
       " '601727.XSHG',\n",
       " '601766.XSHG',\n",
       " '601991.XSHG',\n",
       " '603063.XSHG',\n",
       " '603218.XSHG',\n",
       " '603356.XSHG',\n",
       " '603507.XSHG',\n",
       " '603606.XSHG',\n",
       " '603693.XSHG',\n",
       " '603819.XSHG',\n",
       " '603985.XSHG',\n",
       " '605060.XSHG',\n",
       " '605123.XSHG',\n",
       " '605305.XSHG',\n",
       " '688186.XSHG',\n",
       " '688585.XSHG',\n",
       " '688660.XSHG']"
      ]
     },
     "metadata": {},
     "execution_count": 3
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "source": [
    "get_bars('000001.XSHG', 1, unit='1d',fields=['date','open','close','high','low','volume','money'],include_now=False,end_dt='2021-07-29')"
   ],
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "         date     open    close     high      low        volume         money\n",
       "0  2021-07-28  3355.82  3361.59  3385.54  3312.72  3.958254e+10  5.646977e+11"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>close</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>volume</th>\n",
       "      <th>money</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-07-28</td>\n",
       "      <td>3355.82</td>\n",
       "      <td>3361.59</td>\n",
       "      <td>3385.54</td>\n",
       "      <td>3312.72</td>\n",
       "      <td>3.958254e+10</td>\n",
       "      <td>5.646977e+11</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "metadata": {},
     "execution_count": 33
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "source": [
    "# 选股方法\n",
    "# select_date 选股的日期\n",
    "# hu 数据存储类\n",
    "# for_day 需要从选股日期往前多少个交易日的数据\n",
    "#\n",
    "#\n",
    "# 当这个交易和这个code符合因子选股条件 \n",
    "# 就执行添加到select_sec_data这个dataframe\n",
    "# select_sec_data.loc[select_sec_data.shape[0]] = {'code':key,'pre_close':sec_data_0_md.close,'sort':compare_df_sum}\n",
    "# 最后返回\n",
    "def select_sec_list(select_date:date,hu:HwUtil,for_day:int):\n",
    "    #创建返回datafrmae\n",
    "    colums = ['code','pre_close','sort']\n",
    "    select_sec_data = pd.DataFrame(columns=colums)\n",
    "    select_date_str = select_date.strftime('%Y-%m-%d')\n",
    "    #获得往前N天的交易日和前一个交易日 并筛选出未复权的日K数据\n",
    "    sta_date_que = hu.get_previous_num_trade_date(hu.md_trade_date,select_date,for_day)\n",
    "    end_date_que = hu.get_previous_trade_date(hu.md_trade_date,select_date)\n",
    "    select_md_data = hu.trade_date_list_md[(hu.trade_date_list_md.date>=sta_date_que)&(hu.trade_date_list_md.date<=end_date_que)]\n",
    "    trade_mtss_day = hu.trade_mtss_day[(hu.trade_mtss_day.date>=sta_date_que)&(hu.trade_mtss_day.date<=end_date_que)]\n",
    "    #分组\n",
    "    groupby_code = select_md_data.groupby(\"code\")\n",
    "    print(select_date_str)\n",
    "    for key in groupby_code.groups:\n",
    "        #从股票数据中查询今天是否交易\n",
    "        trade_date_list_info_c_key = hu.trade_date_list_info[(hu.trade_date_list_info['code']==key)&(hu.trade_date_list_info['add_date']==select_date)]\n",
    "        if len(trade_date_list_info_c_key)<=0:\n",
    "            continue\n",
    "        select_sec_md_data = groupby_code.get_group(key)\n",
    "        select_sec_md_data = select_sec_md_data.sort_values('date')\n",
    "        if len(select_sec_md_data)==0:\n",
    "            continue\n",
    "        if len(select_sec_md_data)<for_day:\n",
    "            continue\n",
    "        select_sec_md_data = select_sec_md_data.reset_index(drop=True)\n",
    "        select_sec_md_data['i'] = select_sec_md_data.index\n",
    "        sec_data_0_md = select_sec_md_data.iloc[-1]\n",
    "        sec_data_3_md = select_sec_md_data.iloc[0]\n",
    "        trade_stk_hold_key_data = hu.trade_stk_hold[hu.trade_stk_hold.code==key]\n",
    "        if len(trade_stk_hold_key_data)>0:\n",
    "            trade_stk_hold_key_data = trade_stk_hold_key_data[(trade_stk_hold_key_data.day<=sec_data_0_md.date)&(trade_stk_hold_key_data.day>=sec_data_3_md.date)]\n",
    "            if len(trade_stk_hold_key_data)==for_day:\n",
    "                select_sec_md_data['day'] = select_sec_md_data['date']\n",
    "                select_sec_md_data = select_sec_md_data.set_index('day')\n",
    "                trade_stk_hold_key_data = trade_stk_hold_key_data.set_index('day')\n",
    "                compare_df = pd.concat([trade_stk_hold_key_data, select_sec_md_data], axis=1)\n",
    "                if  (len(compare_df[compare_df['share_ratio']>0]))==for_day:\n",
    "                    if sec_data_0_md.close>=(sec_data_3_md.close*1.10):\n",
    "                        compare_df_sum = compare_df['share_ratio'].sum()\n",
    "                        select_sec_data.loc[select_sec_data.shape[0]] = {'code':key,'pre_close':sec_data_0_md.close,'sort':compare_df_sum}\n",
    "        #北向资金抄底\n",
    "        # sec_data_0_md = select_sec_md_data.iloc[-1]\n",
    "        # sec_data_3_md = select_sec_md_data.iloc[0]\n",
    "        # trade_stk_hold_key_data = hu.trade_stk_hold[hu.trade_stk_hold.code==key]\n",
    "        # if len(trade_stk_hold_key_data)>0:\n",
    "        #     trade_stk_hold_key_data = trade_stk_hold_key_data[(trade_stk_hold_key_data.day<=sec_data_0_md.date)&(trade_stk_hold_key_data.day>=sec_data_3_md.date)]\n",
    "        #     if len(trade_stk_hold_key_data)==3:\n",
    "        #         select_sec_md_data['day'] = select_sec_md_data['date']\n",
    "        #         select_sec_md_data = select_sec_md_data.set_index('day')\n",
    "        #         trade_stk_hold_key_data = trade_stk_hold_key_data.set_index('day')\n",
    "        #         compare_df = pd.concat([trade_stk_hold_key_data, select_sec_md_data], axis=1)\n",
    "        #         if  (len(compare_df[compare_df['share_ratio']>0]))==3:\n",
    "        #             if (sec_data_0_md.close*1.05)<=sec_data_3_md.close:\n",
    "        #                 compare_df_sum = compare_df['share_ratio'].sum()\n",
    "        #                 select_sec_data.loc[select_sec_data.shape[0]] = {'code':key,'pre_close':sec_data_0_md.close,'sort':compare_df_sum}\n",
    "\n",
    "        # sec_data_0_md = select_sec_md_data.iloc[-1]\n",
    "        # sec_data_3_md = select_sec_md_data.iloc[0]\n",
    "        # trade_mtss_day_sec = trade_mtss_day[trade_mtss_day.sec_code==key]\n",
    "        # if len(trade_mtss_day_sec)==len(select_sec_md_data):\n",
    "        #     select_sec_md_data = select_sec_md_data.set_index(\"date\")\n",
    "        #     select_sec_md_data['day'] = select_sec_md_data.index\n",
    "        #     trade_mtss_day_sec = trade_mtss_day_sec.set_index(\"date\")\n",
    "        #     compare_df = pd.concat([select_sec_md_data, trade_mtss_day_sec], axis=1)\n",
    "        #     compare_df['diff_fin'] = compare_df['fin_value'].diff()\n",
    "        #     # print(compare_df[['code','fin_value','diff_fin']])\n",
    "        #     if len(compare_df[compare_df['diff_fin']>0])==(len(select_sec_md_data)-1):\n",
    "        #         if compare_df[compare_df['volume'].max()==compare_df['volume']].iloc[0].day==sec_data_0_md.date:\n",
    "        #             compare_df_sum = compare_df['diff_fin'].sum()\n",
    "        #             select_sec_data.loc[select_sec_data.shape[0]] = {'code':key,'pre_close':sec_data_0_md.close,'sort':compare_df_sum}\n",
    "        #\n",
    "        # 行情数据\n",
    "        # hu.trade_date_list_md\n",
    "        # 股票代码数据\n",
    "        # hu.trade_date_list_info\n",
    "        # 行情数据-除权除息后\n",
    "        # hu.trade_date_list_md_xd\n",
    "        # 交易日数据\n",
    "        # hu.md_trade_date\n",
    "        # 回测交易日数组\n",
    "        # hu.trade_date_list\n",
    "        # 北向资金交易日数据\n",
    "        # hu.md_trade_date_stk\n",
    "        # 北向资金持仓数据\n",
    "        # hu.trade_stk_hold\n",
    "        #写你的选股因子 当前交易日 和 股票 符合条件时添加 sort是排序的条件 不排序传0 \n",
    "        #select_sec_data.loc[select_sec_data.shape[0]] = {'code':key,'pre_close':sec_data_0_md.close,'sort':compare_df_sum}\n",
    "                                \n",
    "    return select_sec_data\n",
    "\n",
    "#循环选股\n",
    "def start_test(hu:HwUtil,size_sec:int,for_day:int):\n",
    "    del hu.res_info_data\n",
    "    hu.res_info_data = pd.DataFrame(columns=['date','code'])\n",
    "    for td in hu.trade_date_list:\n",
    "        th_day = td.strftime('%Y-%m-%d')\n",
    "        print(th_day)\n",
    "        select_sec_data = select_sec_list(td,hu,for_day)\n",
    "        if len(select_sec_data)==0:\n",
    "            continue\n",
    "        if size_sec!=0:\n",
    "            if len(select_sec_data)>size_sec:\n",
    "                select_sec_data.sort_values(\"sort\",inplace=True,ascending=False)\n",
    "                select_sec_data = select_sec_data[0:size_sec]\n",
    "        hu.res_info_data.loc[hu.res_info_data.shape[0]] = {'date':th_day,'code':select_sec_data['code'].tolist()}\n",
    "\n",
    "#收益统计筛选\n",
    "def sec_filter(hu:HwUtil,pre_md_data:DataFrame,to_day_md_data:DataFrame):\n",
    "    md = to_day_md_data.iloc[0]\n",
    "    pre = pre_md_data.iloc[-1]\n",
    "    ppre = pre_md_data.iloc[-2]\n",
    "    if md.close>pre.close*1.09:\n",
    "        return False\n",
    "    else:\n",
    "        if md.close<pre.close*0.91:\n",
    "            return False\n",
    "        else:\n",
    "            if pre.close<ppre.close*0.91:\n",
    "                return False\n",
    "            else:\n",
    "                # kk = get_bars('000001.XSHG', 1, unit='1d',fields=['date','open','close','high','low','volume','money'],include_now=False,end_dt=md.date)\n",
    "                # kka = kk.iloc[-1]\n",
    "                # if (kka.close-kka.open)<0:\n",
    "                #     return False\n",
    "                # else:\n",
    "                return True\n",
    "\n",
    "#num_sell_day:几天后卖出\n",
    "#test_money:测试今天\n",
    "#day_num:几天后卖出\n",
    "#sell_par:卖出入字段 open close\n",
    "#buy_par:买入字段 open close\n",
    "#hold_money_r:持仓占比 0.5 or 1.0\n",
    "def start_test_profit(hu:HwUtil,num_sell_day:int,test_money:float,day_num:int,sell_par:str,buy_par:str,hold_money_r:float):\n",
    "    print(\"开始收益统计\")\n",
    "    del hu.ret_data\n",
    "    buy_fee = 0.0002\n",
    "    sell_fee = 0.0012\n",
    "    hu.ret_data = pd.DataFrame(columns=['date','code','buy','sell','return','sum_return','buy_fee','sell_fee'])\n",
    "    g_money = test_money\n",
    "    for index, row in hu.res_info_data.iterrows():\n",
    "        date = datetime.strptime(row['date'], \"%Y-%m-%d\").date()\n",
    "        print(date)\n",
    "        code_list = row['code']\n",
    "        p_sec_num_buy = pd.DataFrame(columns=['code','buy_money','sell_money'])\n",
    "        for s_code in code_list:\n",
    "            to_day_md_data = hu.trade_date_list_md_xd[(hu.trade_date_list_md_xd['date']==date)&(hu.trade_date_list_md_xd['code']==s_code)]\n",
    "            next_md_data = hu.trade_date_list_md_xd[(hu.trade_date_list_md_xd['date']>date)&(hu.trade_date_list_md_xd['code']==s_code)]\n",
    "            pre_md_data = hu.trade_date_list_md_xd[(hu.trade_date_list_md_xd['date']<date)&(hu.trade_date_list_md_xd['code']==s_code)]\n",
    "            if len(pre_md_data)>day_num:\n",
    "                md_num_data = pre_md_data.iloc[0-day_num]\n",
    "            else:\n",
    "                md_num_data = pre_md_data.iloc[0]\n",
    "            sell_money = 0\n",
    "            buy_money = 0\n",
    "            if len(next_md_data)>(num_sell_day-1):\n",
    "                next_md_data = next_md_data[num_sell_day-1:num_sell_day]\n",
    "                next_md = next_md_data.iloc[0]\n",
    "                sell_money = next_md[sell_par]\n",
    "            if len(to_day_md_data)>0:\n",
    "                md = to_day_md_data.iloc[0]\n",
    "                buy_money = md[buy_par]\n",
    "                pre = pre_md_data.iloc[-1]\n",
    "                ppre = pre_md_data.iloc[-2]\n",
    "                is_sec_filter = sec_filter(hu,pre_md_data,to_day_md_data)\n",
    "                if is_sec_filter==True:\n",
    "                    p_sec_num_buy.loc[p_sec_num_buy.shape[0]] = {'code':md.code,'sell_money':sell_money,'buy_money':buy_money}\n",
    "            to_day_md_data = None\n",
    "            next_md_data = None\n",
    "            sell_money = 0\n",
    "            buy_money = 0\n",
    "        if len(p_sec_num_buy)==0:\n",
    "            hu.ret_data.loc[hu.ret_data.shape[0]] = {'date':date,'code':code_list,'buy':0,'sell':0,'return':0,\"sum_return\":g_money,'buy_fee':0,'sell_fee':0}\n",
    "        else:\n",
    "            p_sec_num_buy['money'] = (g_money*hold_money_r)/len(p_sec_num_buy)\n",
    "            p_sec_num_buy['vol'] = p_sec_num_buy['money']/(p_sec_num_buy['buy_money']*100)\n",
    "            p_sec_num_buy['vol'] = round(p_sec_num_buy['vol'],0)*100\n",
    "            p_sec_num_buy['b_money'] = p_sec_num_buy['buy_money']*p_sec_num_buy['vol']\n",
    "            p_sec_num_buy['s_money'] = p_sec_num_buy['sell_money']*p_sec_num_buy['vol']\n",
    "            buy_money = p_sec_num_buy['b_money'].sum()\n",
    "            sell_money = p_sec_num_buy['s_money'].sum()\n",
    "            buy_money_fee = buy_money*buy_fee\n",
    "            sell_money_fee = sell_money*sell_fee\n",
    "            if buy_money == 0 or sell_money==0:\n",
    "                hu.ret_data.loc[hu.ret_data.shape[0]] = {'date':date,'code':code_list,'buy':0,'sell':0,'return':0,\"sum_return\":g_money,'buy_fee':0,'sell_fee':0}\n",
    "            else:\n",
    "                return_money = sell_money-buy_money-buy_money_fee-sell_money_fee\n",
    "                g_money = g_money+return_money\n",
    "                hu.ret_data.loc[hu.ret_data.shape[0]] = {'date':date,'code':code_list,'buy':buy_money,'sell':sell_money,'return':return_money,\"sum_return\":g_money,'buy_fee':buy_money_fee,'sell_fee':sell_money_fee}\n",
    "            p_sec_num_buy = None\n",
    "            buy_money = 0\n",
    "            sell_money = 0\n",
    "            return_money = 0\n",
    "    print(\"收益统计完成\")\n",
    "    p_profit(hu,test_money)\n",
    "\n",
    "    \n",
    "def p_profit(hu:HwUtil,test_money:float):\n",
    "    z_money = test_money\n",
    "    huret_data = hu.ret_data.set_index('date')\n",
    "    hu.ret_data[['date', 'sum_return']].plot(figsize=(16,9), secondary_y='sum_return')\n",
    "    hu.ret_data['returns_a'] = hu.ret_data['return']/hu.ret_data['sum_return']\n",
    "    sum_money = hu.ret_data.iloc[-1].sum_return\n",
    "    win = sum_money-z_money\n",
    "    max_draw = max_drawdown(hu.ret_data['returns_a'].values)*100\n",
    "    ret_r = win/test_money*100\n",
    "    year_win_r = win/z_money/len(hu.ret_data)*365*100\n",
    "    win_r = len(hu.ret_data[hu.ret_data['return']>0])/len(hu.ret_data)*100\n",
    "    max_money_use_r = hu.ret_data['buy'].max()/hu.ret_data[hu.ret_data['buy'].max()==hu.ret_data['buy']].iloc[0].sum_return*100\n",
    "    l_max_los = hu.ret_data['return'].min()\n",
    "    l_max_los_r = hu.ret_data['returns_a'].min()*100\n",
    "    l_max_win = hu.ret_data['return'].max()\n",
    "    l_max_win_r = hu.ret_data['returns_a'].max()*100\n",
    "    buy_fee_money = hu.ret_data['buy_fee'].sum()\n",
    "    sell_fee_money = hu.ret_data['sell_fee'].sum()\n",
    "    print(\"总资金:\"+str(round(sum_money,2))+\"\")\n",
    "    print(\"总收益:\"+str(round(win,2))+\"\")\n",
    "    print(\"收益率:\"+str(round(ret_r,2))+\"%\")\n",
    "    print(\"年化收益率:\"+str(round(year_win_r,2))+\"%\")\n",
    "    print(\"最大回撤:\"+str(round(max_draw,2))+\"%\")\n",
    "    print(\"胜率:\"+str(round(win_r,2))+\"%\")\n",
    "    print(\"最大资金使用率:\"+str(round(max_money_use_r,2))+\"%\")\n",
    "    print(\"当次最大亏损:\"+str(round(l_max_los,2))+\"\")\n",
    "    print(\"当次最大亏损率:\"+str(round(l_max_los_r,2))+\"%\")\n",
    "    print(\"当次最大盈利:\"+str(round(l_max_win,2))+\"\")\n",
    "    print(\"当次最大盈利率:\"+str(round(l_max_win_r,2))+\"%\")\n",
    "    print(\"总手续费:\"+str(round(sell_fee_money+buy_fee_money,2))+\"\")\n",
    "    print(\"买入手续费:\"+str(round(buy_fee_money,2))+\"\")\n",
    "    print(\"卖出手续费:\"+str(round(sell_fee_money,2))+\"\")"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "source": [
    "#初始化数据\n",
    "#sta_date_str 回测开始时间\n",
    "#end_date_str 回测结束时间\n",
    "#for_day      需要选股当天往前多少个交易日的数据\n",
    "#is_ck        是否使用ck数据库\n",
    "#is_stk       是否初始化北向资金\n",
    "# 此方法仅初始化一次 无需重复执行\n",
    "#\n",
    "# 行情数据\n",
    "# hu.trade_date_list_md\n",
    "# 股票代码数据\n",
    "# hu.trade_date_list_info\n",
    "# 行情数据-除权除息后\n",
    "# hu.trade_date_list_md_xd\n",
    "# 交易日数据\n",
    "# hu.md_trade_date\n",
    "# 回测交易日数组\n",
    "# hu.trade_date_list\n",
    "# 北向资金交易日数据\n",
    "# hu.md_trade_date_stk\n",
    "# 北向资金持仓数据\n",
    "# hu.trade_stk_hold\n",
    "# 选股结果\n",
    "# hu.res_info_data\n",
    "# 计算收益结果\n",
    "# hu.ret_data\n",
    "# 任何地方均可以调用\n",
    "hu.init_md_trade_sec_data(sta_date_str='2021-01-01',end_date_str='2021-07-29',for_day=3,is_ck=True,is_stk=True,is_mtss=True)"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "Error on 192.168.0.88:9000 ping: Unexpected EOF while reading bytes\n",
      "Connection was closed, reconnecting.\n",
      "Error on socket shutdown: [Errno 57] Socket is not connected\n",
      "查询除权除息\n",
      "select distinct * from sec_data.sec_xr_xd where 1=1 and a_xr_date >='2020-12-29' and a_xr_date<'2021-07-29'\n",
      "查询除权除息-完成\n",
      "查询行情\n",
      "查询行情-完成\n",
      "开始除权除息\n",
      "除权除息-完成\n",
      "开始交易日\n",
      "开始交易日-完成\n",
      "获取北向资金交易日\n",
      "select distinct * from sec_data.sec_stk_day where 1=1 and day >='2020-12-29' and day<'2021-07-29'\n",
      "获取北向资金交易日-完成\n",
      "获取北向资金持仓\n",
      "select distinct * from sec_data.sec_stk_hold where 1=1 and day >='2020-12-29' and day<'2021-07-29'\n",
      "获取北向资金持仓-完成\n",
      "获取融资融卷数据\n",
      "select distinct * from sec_data.sec_mtss_day where 1=1 and date >='2020-12-29' and date<'2021-07-29'\n",
      "获取融资融卷数据-完成\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "source": [
    "select_sec_list(select_date=datetime.strptime('2021-06-01', \"%Y-%m-%d\").date(),hu=hu,for_day=3)"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "2021-06-01\n"
     ]
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "           code  pre_close   sort\n",
       "0   000019.XSHE       7.69   1.26\n",
       "1   000301.XSHE      17.31   9.72\n",
       "2   000652.XSHE       4.78   0.35\n",
       "3   000672.XSHE      20.13   2.91\n",
       "4   000676.XSHE       6.61   2.13\n",
       "5   000829.XSHE       8.16   1.73\n",
       "6   000889.XSHE       4.46   1.83\n",
       "7   000921.XSHE      14.52  23.45\n",
       "8   002020.XSHE       9.00   5.90\n",
       "9   002034.XSHE      17.61   1.35\n",
       "10  002044.XSHE      11.65   6.45\n",
       "11  002064.XSHE      12.38  10.75\n",
       "12  002099.XSHE       8.75   4.63\n",
       "13  002324.XSHE      13.47   2.34\n",
       "14  002444.XSHE      32.85  17.11\n",
       "15  002506.XSHE       2.93   4.11\n",
       "16  002557.XSHE      51.10  51.42\n",
       "17  002582.XSHE      11.28   0.57\n",
       "18  002698.XSHE      12.19   4.15\n",
       "19  002867.XSHE      27.03   9.05\n",
       "20  600029.XSHG       6.37  23.70\n",
       "21  600115.XSHG       5.42   4.76\n",
       "22  600150.XSHG      17.18   5.55\n",
       "23  600161.XSHG      34.12   7.10\n",
       "24  600185.XSHG       8.16  14.94\n",
       "25  600260.XSHG       7.90   4.15\n",
       "26  600305.XSHG      22.12  18.60\n",
       "27  600337.XSHG       4.46   6.22\n",
       "28  600346.XSHG      27.22   7.08\n",
       "29  600449.XSHG      12.66   0.24\n",
       "30  600740.XSHG       4.96   1.33\n",
       "31  600825.XSHG       5.66   0.24\n",
       "32  600971.XSHG       5.98  13.09\n",
       "33  600989.XSHG      14.21  10.68\n",
       "34  601021.XSHG      65.24   7.20\n",
       "35  601058.XSHG      10.70   5.77\n",
       "36  601111.XSHG       8.41   3.72\n",
       "37  601727.XSHG       4.61   2.30\n",
       "38  601966.XSHG      48.10  15.45\n",
       "39  603043.XSHG      37.98   9.60\n",
       "40  603156.XSHG      31.94   0.09\n",
       "41  603317.XSHG      36.13   7.59\n",
       "42  603456.XSHG      44.35   2.86\n",
       "43  603588.XSHG      18.00   5.08\n",
       "44  603877.XSHG      52.01   3.81\n",
       "45  605108.XSHG      29.44  11.68"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>code</th>\n",
       "      <th>pre_close</th>\n",
       "      <th>sort</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>000019.XSHE</td>\n",
       "      <td>7.69</td>\n",
       "      <td>1.26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>000301.XSHE</td>\n",
       "      <td>17.31</td>\n",
       "      <td>9.72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>000652.XSHE</td>\n",
       "      <td>4.78</td>\n",
       "      <td>0.35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>000672.XSHE</td>\n",
       "      <td>20.13</td>\n",
       "      <td>2.91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>000676.XSHE</td>\n",
       "      <td>6.61</td>\n",
       "      <td>2.13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>000829.XSHE</td>\n",
       "      <td>8.16</td>\n",
       "      <td>1.73</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>000889.XSHE</td>\n",
       "      <td>4.46</td>\n",
       "      <td>1.83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>000921.XSHE</td>\n",
       "      <td>14.52</td>\n",
       "      <td>23.45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>002020.XSHE</td>\n",
       "      <td>9.00</td>\n",
       "      <td>5.90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>002034.XSHE</td>\n",
       "      <td>17.61</td>\n",
       "      <td>1.35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>002044.XSHE</td>\n",
       "      <td>11.65</td>\n",
       "      <td>6.45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>002064.XSHE</td>\n",
       "      <td>12.38</td>\n",
       "      <td>10.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>002099.XSHE</td>\n",
       "      <td>8.75</td>\n",
       "      <td>4.63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>002324.XSHE</td>\n",
       "      <td>13.47</td>\n",
       "      <td>2.34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>002444.XSHE</td>\n",
       "      <td>32.85</td>\n",
       "      <td>17.11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>002506.XSHE</td>\n",
       "      <td>2.93</td>\n",
       "      <td>4.11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>002557.XSHE</td>\n",
       "      <td>51.10</td>\n",
       "      <td>51.42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>002582.XSHE</td>\n",
       "      <td>11.28</td>\n",
       "      <td>0.57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>002698.XSHE</td>\n",
       "      <td>12.19</td>\n",
       "      <td>4.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>002867.XSHE</td>\n",
       "      <td>27.03</td>\n",
       "      <td>9.05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>600029.XSHG</td>\n",
       "      <td>6.37</td>\n",
       "      <td>23.70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>600115.XSHG</td>\n",
       "      <td>5.42</td>\n",
       "      <td>4.76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>600150.XSHG</td>\n",
       "      <td>17.18</td>\n",
       "      <td>5.55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>600161.XSHG</td>\n",
       "      <td>34.12</td>\n",
       "      <td>7.10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>600185.XSHG</td>\n",
       "      <td>8.16</td>\n",
       "      <td>14.94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>600260.XSHG</td>\n",
       "      <td>7.90</td>\n",
       "      <td>4.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>600305.XSHG</td>\n",
       "      <td>22.12</td>\n",
       "      <td>18.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>600337.XSHG</td>\n",
       "      <td>4.46</td>\n",
       "      <td>6.22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>600346.XSHG</td>\n",
       "      <td>27.22</td>\n",
       "      <td>7.08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>600449.XSHG</td>\n",
       "      <td>12.66</td>\n",
       "      <td>0.24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>600740.XSHG</td>\n",
       "      <td>4.96</td>\n",
       "      <td>1.33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>600825.XSHG</td>\n",
       "      <td>5.66</td>\n",
       "      <td>0.24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>600971.XSHG</td>\n",
       "      <td>5.98</td>\n",
       "      <td>13.09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>600989.XSHG</td>\n",
       "      <td>14.21</td>\n",
       "      <td>10.68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>601021.XSHG</td>\n",
       "      <td>65.24</td>\n",
       "      <td>7.20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>601058.XSHG</td>\n",
       "      <td>10.70</td>\n",
       "      <td>5.77</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>601111.XSHG</td>\n",
       "      <td>8.41</td>\n",
       "      <td>3.72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>601727.XSHG</td>\n",
       "      <td>4.61</td>\n",
       "      <td>2.30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>601966.XSHG</td>\n",
       "      <td>48.10</td>\n",
       "      <td>15.45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>603043.XSHG</td>\n",
       "      <td>37.98</td>\n",
       "      <td>9.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>603156.XSHG</td>\n",
       "      <td>31.94</td>\n",
       "      <td>0.09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>603317.XSHG</td>\n",
       "      <td>36.13</td>\n",
       "      <td>7.59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>603456.XSHG</td>\n",
       "      <td>44.35</td>\n",
       "      <td>2.86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>603588.XSHG</td>\n",
       "      <td>18.00</td>\n",
       "      <td>5.08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>603877.XSHG</td>\n",
       "      <td>52.01</td>\n",
       "      <td>3.81</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>605108.XSHG</td>\n",
       "      <td>29.44</td>\n",
       "      <td>11.68</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "metadata": {},
     "execution_count": 45
    }
   ],
   "metadata": {
    "tags": []
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "source": [
    "#开始回测\n",
    "#hu           数据类\n",
    "#size_sec     每天选多少支股票 选股方法的sort有值会根据sort排序 传0则全部\n",
    "#for_day      需要选股当天往前多少个交易日的数据\n",
    "start_test(hu=hu,size_sec=5,for_day=3)"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "2021-07-01\n",
      "2021-07-01\n",
      "2021-07-02\n",
      "2021-07-02\n",
      "2021-07-05\n",
      "2021-07-05\n",
      "2021-07-06\n",
      "2021-07-06\n",
      "2021-07-07\n",
      "2021-07-07\n",
      "2021-07-08\n",
      "2021-07-08\n",
      "2021-07-09\n",
      "2021-07-09\n",
      "2021-07-12\n",
      "2021-07-12\n",
      "2021-07-13\n",
      "2021-07-13\n",
      "2021-07-14\n",
      "2021-07-14\n",
      "2021-07-15\n",
      "2021-07-15\n",
      "2021-07-16\n",
      "2021-07-16\n",
      "2021-07-19\n",
      "2021-07-19\n",
      "2021-07-20\n",
      "2021-07-20\n",
      "2021-07-21\n",
      "2021-07-21\n",
      "2021-07-22\n",
      "2021-07-22\n",
      "2021-07-23\n",
      "2021-07-23\n",
      "2021-07-26\n",
      "2021-07-26\n",
      "2021-07-27\n",
      "2021-07-27\n",
      "2021-07-28\n",
      "2021-07-28\n"
     ]
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "source": [
    "hu.res_info_data"
   ],
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "          date                                               code\n",
       "0   2021-07-07  [600309.XSHG, 002460.XSHE, 000625.XSHE, 600409...\n",
       "1   2021-07-08  [002080.XSHE, 002182.XSHE, 603659.XSHG, 002074...\n",
       "2   2021-07-09  [002182.XSHE, 002371.XSHE, 603659.XSHG, 600587...\n",
       "3   2021-07-12  [600201.XSHG, 603218.XSHG, 600577.XSHG, 600111...\n",
       "4   2021-07-13  [600885.XSHG, 002812.XSHE, 600782.XSHG, 603127...\n",
       "5   2021-07-14  [002439.XSHE, 601615.XSHG, 000012.XSHE, 601636...\n",
       "6   2021-07-15  [002439.XSHE, 601636.XSHG, 002074.XSHE, 600409...\n",
       "7   2021-07-16  [600295.XSHG, 000825.XSHE, 603279.XSHG, 002268...\n",
       "8   2021-07-19  [600782.XSHG, 600295.XSHG, 000825.XSHE, 603279...\n",
       "9   2021-07-20  [600258.XSHG, 603915.XSHG, 000998.XSHE, 002481...\n",
       "10  2021-07-21  [603915.XSHG, 600285.XSHG, 600210.XSHG, 600703...\n",
       "11  2021-07-22  [002812.XSHE, 603338.XSHG, 002460.XSHE, 600438...\n",
       "12  2021-07-23  [002353.XSHE, 002182.XSHE, 002460.XSHE, 600438...\n",
       "13  2021-07-26  [600782.XSHG, 601877.XSHG, 000825.XSHE, 002092...\n",
       "14  2021-07-27  [600406.XSHG, 601877.XSHG, 600185.XSHG, 000400...\n",
       "15  2021-07-28  [600183.XSHG, 002913.XSHE, 002436.XSHE, 600312..."
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>code</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-07-07</td>\n",
       "      <td>[600309.XSHG, 002460.XSHE, 000625.XSHE, 600409...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-07-08</td>\n",
       "      <td>[002080.XSHE, 002182.XSHE, 603659.XSHG, 002074...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-07-09</td>\n",
       "      <td>[002182.XSHE, 002371.XSHE, 603659.XSHG, 600587...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-07-12</td>\n",
       "      <td>[600201.XSHG, 603218.XSHG, 600577.XSHG, 600111...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-07-13</td>\n",
       "      <td>[600885.XSHG, 002812.XSHE, 600782.XSHG, 603127...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-07-14</td>\n",
       "      <td>[002439.XSHE, 601615.XSHG, 000012.XSHE, 601636...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-07-15</td>\n",
       "      <td>[002439.XSHE, 601636.XSHG, 002074.XSHE, 600409...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2021-07-16</td>\n",
       "      <td>[600295.XSHG, 000825.XSHE, 603279.XSHG, 002268...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2021-07-19</td>\n",
       "      <td>[600782.XSHG, 600295.XSHG, 000825.XSHE, 603279...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2021-07-20</td>\n",
       "      <td>[600258.XSHG, 603915.XSHG, 000998.XSHE, 002481...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2021-07-21</td>\n",
       "      <td>[603915.XSHG, 600285.XSHG, 600210.XSHG, 600703...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2021-07-22</td>\n",
       "      <td>[002812.XSHE, 603338.XSHG, 002460.XSHE, 600438...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2021-07-23</td>\n",
       "      <td>[002353.XSHE, 002182.XSHE, 002460.XSHE, 600438...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2021-07-26</td>\n",
       "      <td>[600782.XSHG, 601877.XSHG, 000825.XSHE, 002092...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>2021-07-27</td>\n",
       "      <td>[600406.XSHG, 601877.XSHG, 600185.XSHG, 000400...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>2021-07-28</td>\n",
       "      <td>[600183.XSHG, 002913.XSHE, 002436.XSHE, 600312...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "metadata": {},
     "execution_count": 7
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "source": [
    "hu.res_info_data.to_parquet(\"data/stk_hold_test.parquet\")"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "source": [
    "hu.res_info_data = pd.read_parquet(\"/Users/weihe/Documents/回测/回测数据/20210727.parquet\")"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "source": [
    "hu.res_info_data"
   ],
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "           date                                               code\n",
       "0    2021-01-04  [601901.XSHG, 002008.XSHE, 601888.XSHG, 603317...\n",
       "1    2021-01-05  [601901.XSHG, 601888.XSHG, 002812.XSHE, 601012...\n",
       "2    2021-01-06  [600887.XSHG, 600298.XSHG, 002812.XSHE, 603605...\n",
       "3    2021-01-07  [002271.XSHE, 002557.XSHE, 603605.XSHG, 002511...\n",
       "4    2021-01-08  [002271.XSHE, 002353.XSHE, 601100.XSHG, 600031...\n",
       "..          ...                                                ...\n",
       "110  2021-07-08  [002080.XSHE, 002182.XSHE, 603659.XSHG, 002074...\n",
       "111  2021-07-09  [002182.XSHE, 002371.XSHE, 603659.XSHG, 600587...\n",
       "112  2021-07-12  [600201.XSHG, 603218.XSHG, 600577.XSHG, 600111...\n",
       "113  2021-07-13  [600885.XSHG, 002812.XSHE, 600782.XSHG, 603127...\n",
       "114  2021-07-14  [002439.XSHE, 601615.XSHG, 000012.XSHE, 601636...\n",
       "\n",
       "[115 rows x 2 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>code</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-01-04</td>\n",
       "      <td>[601901.XSHG, 002008.XSHE, 601888.XSHG, 603317...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-01-05</td>\n",
       "      <td>[601901.XSHG, 601888.XSHG, 002812.XSHE, 601012...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-01-06</td>\n",
       "      <td>[600887.XSHG, 600298.XSHG, 002812.XSHE, 603605...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-01-07</td>\n",
       "      <td>[002271.XSHE, 002557.XSHE, 603605.XSHG, 002511...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-01-08</td>\n",
       "      <td>[002271.XSHE, 002353.XSHE, 601100.XSHG, 600031...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>2021-07-08</td>\n",
       "      <td>[002080.XSHE, 002182.XSHE, 603659.XSHG, 002074...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>111</th>\n",
       "      <td>2021-07-09</td>\n",
       "      <td>[002182.XSHE, 002371.XSHE, 603659.XSHG, 600587...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>112</th>\n",
       "      <td>2021-07-12</td>\n",
       "      <td>[600201.XSHG, 603218.XSHG, 600577.XSHG, 600111...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113</th>\n",
       "      <td>2021-07-13</td>\n",
       "      <td>[600885.XSHG, 002812.XSHE, 600782.XSHG, 603127...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>114</th>\n",
       "      <td>2021-07-14</td>\n",
       "      <td>[002439.XSHE, 601615.XSHG, 000012.XSHE, 601636...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>115 rows × 2 columns</p>\n",
       "</div>"
      ]
     },
     "metadata": {},
     "execution_count": 42
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "source": [
    "hu.res_info_data = hu.res_info_data[42:-1]"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "source": [
    "new_res_info_data = hu.res_info_data\n",
    "for index, row in new_res_info_data.iterrows():\n",
    "    code_list = row['code']\n",
    "    code_list = code_list[0:1]\n",
    "    row['code'] = code_list"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "source": [
    "#hu             数据类\n",
    "#num_sell_day   几天后卖出 1为明天卖出\n",
    "#test_money     回测金额\n",
    "#day_num        往前几天买入 默认1 勿修改\n",
    "#sell_par       卖出字段 open close\n",
    "#buy_par        买入字段 open close\n",
    "#hold_money_r   持仓占比 0.5 or 1.0\n",
    "# start_test_profit(hu=hu,num_sell_day=3,test_money=1000000,day_num=1,sell_par='close',buy_par='close',hold_money_r=0.3)\n",
    "start_test_profit(hu=hu,num_sell_day=3,test_money=1000000,day_num=1,sell_par='close',buy_par='close',hold_money_r=0.3)\n",
    "# start_test_profit(hu=hu,num_sell_day=1,test_money=1000000,day_num=1,sell_par='close',buy_par='close',hold_money_r=1)\n",
    "# 3day sell-close buy-close 仓位:0.3 年化:44.3% 回撤:-13.42% 胜率:55.96%\n",
    "# 2day sell-close buy-close 仓位:0.5 年化:57.21%   回撤:-16。26%    胜率:57.21%\n",
    "# 1day sell-close buy-close 仓位:1   年化:41.56%   回撤:-20.8%    胜率:53.21%\n",
    "#2调\n",
    "# 3day sell-close buy-close 仓位:0.3 年化:55.02%   回撤:-12.18%   胜率:56.88%\n",
    "# 2day sell-close buy-close 仓位:0.5 年化:75.02%   回撤:-14.31%   胜率:56.88%\n",
    "# 1day sell-close buy-close 仓位:1   年化:63.26%   回撤:-19.3%    胜率:55.05%\n",
    "#3调\n",
    "# 3day sell-close buy-close 仓位:0.3 年化:65.69%   回撤:-11.90%    胜率:56.88%\n",
    "# 2day sell-close buy-close 仓位:0.5 年化:86.58%   回撤:-14.31%    胜率:57.80%\n",
    "# 1day sell-close buy-close 仓位:1   年化:70.67%   回撤:-18.86%    胜率:54.13%"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "开始收益统计\n",
      "2021-01-04\n",
      "2021-01-05\n",
      "2021-01-06\n",
      "2021-01-07\n",
      "2021-01-08\n",
      "2021-01-11\n",
      "2021-01-12\n",
      "2021-01-13\n",
      "2021-01-14\n",
      "2021-01-15\n",
      "2021-01-18\n",
      "2021-01-19\n",
      "2021-01-20\n",
      "2021-01-21\n",
      "2021-01-22\n",
      "2021-01-25\n",
      "2021-01-26\n",
      "2021-01-27\n",
      "2021-01-28\n",
      "2021-01-29\n",
      "2021-02-01\n",
      "2021-02-02\n",
      "2021-02-03\n",
      "2021-02-04\n",
      "2021-02-05\n",
      "2021-02-08\n",
      "2021-02-09\n",
      "2021-02-10\n",
      "2021-02-18\n",
      "2021-02-19\n",
      "2021-02-22\n",
      "2021-02-23\n",
      "2021-02-24\n",
      "2021-02-25\n",
      "2021-02-26\n",
      "2021-03-01\n",
      "2021-03-02\n",
      "2021-03-03\n",
      "2021-03-04\n",
      "2021-03-05\n",
      "2021-03-08\n",
      "2021-03-09\n",
      "2021-03-10\n",
      "2021-03-11\n",
      "2021-03-12\n",
      "2021-03-15\n",
      "2021-03-16\n",
      "2021-03-17\n",
      "2021-03-18\n",
      "2021-03-19\n",
      "2021-03-22\n",
      "2021-03-23\n",
      "2021-03-24\n",
      "2021-03-25\n",
      "2021-03-26\n",
      "2021-03-29\n",
      "2021-03-30\n",
      "2021-03-31\n",
      "2021-04-01\n",
      "2021-04-12\n",
      "2021-04-13\n",
      "2021-04-14\n",
      "2021-04-15\n",
      "2021-04-16\n",
      "2021-04-19\n",
      "2021-04-20\n",
      "2021-04-21\n",
      "2021-04-22\n",
      "2021-04-23\n",
      "2021-04-26\n",
      "2021-04-27\n",
      "2021-04-28\n",
      "2021-04-29\n",
      "2021-04-30\n",
      "2021-05-06\n",
      "2021-05-07\n",
      "2021-05-10\n",
      "2021-05-11\n",
      "2021-05-12\n",
      "2021-05-13\n",
      "2021-05-14\n",
      "2021-05-17\n",
      "2021-05-18\n",
      "2021-05-25\n",
      "2021-05-26\n",
      "2021-05-27\n",
      "2021-05-28\n",
      "2021-05-31\n",
      "2021-06-01\n",
      "2021-06-02\n",
      "2021-06-03\n",
      "2021-06-04\n",
      "2021-06-07\n",
      "2021-06-08\n",
      "2021-06-09\n",
      "2021-06-10\n",
      "2021-06-11\n",
      "2021-06-15\n",
      "2021-06-16\n",
      "2021-06-17\n",
      "2021-06-18\n",
      "2021-06-21\n",
      "2021-06-22\n",
      "2021-06-23\n",
      "2021-06-24\n",
      "2021-06-25\n",
      "2021-06-28\n",
      "2021-06-29\n",
      "2021-06-30\n",
      "2021-07-07\n",
      "2021-07-08\n",
      "2021-07-09\n",
      "2021-07-12\n",
      "2021-07-13\n",
      "2021-07-14\n",
      "收益统计完成\n",
      "总资金:832749.02\n",
      "总收益:-167250.98\n",
      "收益率:-16.73%\n",
      "年化收益率:-53.08%\n",
      "最大回撤:-23.63%\n",
      "胜率:41.74%\n",
      "最大资金使用率:30.36%\n",
      "当次最大亏损:-27737.6\n",
      "当次最大亏损率:-2.97%\n",
      "当次最大盈利:33886.49\n",
      "当次最大盈利率:3.36%\n",
      "总手续费:42926.98\n",
      "买入手续费:6153.74\n",
      "卖出手续费:36773.25\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 1152x648 with 2 Axes>"
      ],
      "image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<svg height=\"530.916563pt\" version=\"1.1\" viewBox=\"0 0 939.965625 530.916563\" width=\"939.965625pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n   <cc:Work>\n    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n    <dc:date>2021-07-30T14:39:58.830117</dc:date>\n    <dc:format>image/svg+xml</dc:format>\n    <dc:creator>\n     <cc:Agent>\n      <dc:title>Matplotlib v3.4.2, https://matplotlib.org/</dc:title>\n     </cc:Agent>\n    </dc:creator>\n   </cc:Work>\n  </rdf:RDF>\n </metadata>\n <defs>\n  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n  <g id=\"patch_1\">\n   <path d=\"M 0 530.916563 \nL 939.965625 530.916563 \nL 939.965625 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n  </g>\n  <g id=\"axes_1\">\n   <g id=\"patch_2\">\n    <path d=\"M 10.7 507.038438 \nL 903.5 507.038438 \nL 903.5 17.798438 \nL 10.7 17.798438 \nz\n\" style=\"fill:#ffffff;\"/>\n   </g>\n   <g id=\"matplotlib.axis_1\">\n    <g id=\"xtick_1\">\n     <g id=\"line2d_1\">\n      <defs>\n       <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"mdd54f7ebf5\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"51.281818\" xlink:href=\"#mdd54f7ebf5\" y=\"507.038438\"/>\n      </g>\n     </g>\n     <g id=\"text_1\">\n      <!-- 0 -->\n      <g transform=\"translate(48.100568 521.636875)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 2034 4250 \nQ 1547 4250 1301 3770 \nQ 1056 3291 1056 2328 \nQ 1056 1369 1301 889 \nQ 1547 409 2034 409 \nQ 2525 409 2770 889 \nQ 3016 1369 3016 2328 \nQ 3016 3291 2770 3770 \nQ 2525 4250 2034 4250 \nz\nM 2034 4750 \nQ 2819 4750 3233 4129 \nQ 3647 3509 3647 2328 \nQ 3647 1150 3233 529 \nQ 2819 -91 2034 -91 \nQ 1250 -91 836 529 \nQ 422 1150 422 2328 \nQ 422 3509 836 4129 \nQ 1250 4750 2034 4750 \nz\n\" id=\"DejaVuSans-30\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_2\">\n     <g id=\"line2d_2\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"193.674163\" xlink:href=\"#mdd54f7ebf5\" y=\"507.038438\"/>\n      </g>\n     </g>\n     <g id=\"text_2\">\n      <!-- 20 -->\n      <g transform=\"translate(187.311663 521.636875)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 1228 531 \nL 3431 531 \nL 3431 0 \nL 469 0 \nL 469 531 \nQ 828 903 1448 1529 \nQ 2069 2156 2228 2338 \nQ 2531 2678 2651 2914 \nQ 2772 3150 2772 3378 \nQ 2772 3750 2511 3984 \nQ 2250 4219 1831 4219 \nQ 1534 4219 1204 4116 \nQ 875 4013 500 3803 \nL 500 4441 \nQ 881 4594 1212 4672 \nQ 1544 4750 1819 4750 \nQ 2544 4750 2975 4387 \nQ 3406 4025 3406 3419 \nQ 3406 3131 3298 2873 \nQ 3191 2616 2906 2266 \nQ 2828 2175 2409 1742 \nQ 1991 1309 1228 531 \nz\n\" id=\"DejaVuSans-32\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-32\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_3\">\n     <g id=\"line2d_3\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"336.066507\" xlink:href=\"#mdd54f7ebf5\" y=\"507.038438\"/>\n      </g>\n     </g>\n     <g id=\"text_3\">\n      <!-- 40 -->\n      <g transform=\"translate(329.704007 521.636875)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 2419 4116 \nL 825 1625 \nL 2419 1625 \nL 2419 4116 \nz\nM 2253 4666 \nL 3047 4666 \nL 3047 1625 \nL 3713 1625 \nL 3713 1100 \nL 3047 1100 \nL 3047 0 \nL 2419 0 \nL 2419 1100 \nL 313 1100 \nL 313 1709 \nL 2253 4666 \nz\n\" id=\"DejaVuSans-34\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-34\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_4\">\n     <g id=\"line2d_4\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"478.458852\" xlink:href=\"#mdd54f7ebf5\" y=\"507.038438\"/>\n      </g>\n     </g>\n     <g id=\"text_4\">\n      <!-- 60 -->\n      <g transform=\"translate(472.096352 521.636875)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 2113 2584 \nQ 1688 2584 1439 2293 \nQ 1191 2003 1191 1497 \nQ 1191 994 1439 701 \nQ 1688 409 2113 409 \nQ 2538 409 2786 701 \nQ 3034 994 3034 1497 \nQ 3034 2003 2786 2293 \nQ 2538 2584 2113 2584 \nz\nM 3366 4563 \nL 3366 3988 \nQ 3128 4100 2886 4159 \nQ 2644 4219 2406 4219 \nQ 1781 4219 1451 3797 \nQ 1122 3375 1075 2522 \nQ 1259 2794 1537 2939 \nQ 1816 3084 2150 3084 \nQ 2853 3084 3261 2657 \nQ 3669 2231 3669 1497 \nQ 3669 778 3244 343 \nQ 2819 -91 2113 -91 \nQ 1303 -91 875 529 \nQ 447 1150 447 2328 \nQ 447 3434 972 4092 \nQ 1497 4750 2381 4750 \nQ 2619 4750 2861 4703 \nQ 3103 4656 3366 4563 \nz\n\" id=\"DejaVuSans-36\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-36\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_5\">\n     <g id=\"line2d_5\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"620.851196\" xlink:href=\"#mdd54f7ebf5\" y=\"507.038438\"/>\n      </g>\n     </g>\n     <g id=\"text_5\">\n      <!-- 80 -->\n      <g transform=\"translate(614.488696 521.636875)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 2034 2216 \nQ 1584 2216 1326 1975 \nQ 1069 1734 1069 1313 \nQ 1069 891 1326 650 \nQ 1584 409 2034 409 \nQ 2484 409 2743 651 \nQ 3003 894 3003 1313 \nQ 3003 1734 2745 1975 \nQ 2488 2216 2034 2216 \nz\nM 1403 2484 \nQ 997 2584 770 2862 \nQ 544 3141 544 3541 \nQ 544 4100 942 4425 \nQ 1341 4750 2034 4750 \nQ 2731 4750 3128 4425 \nQ 3525 4100 3525 3541 \nQ 3525 3141 3298 2862 \nQ 3072 2584 2669 2484 \nQ 3125 2378 3379 2068 \nQ 3634 1759 3634 1313 \nQ 3634 634 3220 271 \nQ 2806 -91 2034 -91 \nQ 1263 -91 848 271 \nQ 434 634 434 1313 \nQ 434 1759 690 2068 \nQ 947 2378 1403 2484 \nz\nM 1172 3481 \nQ 1172 3119 1398 2916 \nQ 1625 2713 2034 2713 \nQ 2441 2713 2670 2916 \nQ 2900 3119 2900 3481 \nQ 2900 3844 2670 4047 \nQ 2441 4250 2034 4250 \nQ 1625 4250 1398 4047 \nQ 1172 3844 1172 3481 \nz\n\" id=\"DejaVuSans-38\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-38\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_6\">\n     <g id=\"line2d_6\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"763.243541\" xlink:href=\"#mdd54f7ebf5\" y=\"507.038438\"/>\n      </g>\n     </g>\n     <g id=\"text_6\">\n      <!-- 100 -->\n      <g transform=\"translate(753.699791 521.636875)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 794 531 \nL 1825 531 \nL 1825 4091 \nL 703 3866 \nL 703 4441 \nL 1819 4666 \nL 2450 4666 \nL 2450 531 \nL 3481 531 \nL 3481 0 \nL 794 0 \nL 794 531 \nz\n\" id=\"DejaVuSans-31\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n   </g>\n   <g id=\"patch_3\">\n    <path d=\"M 10.7 507.038438 \nL 10.7 17.798438 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_4\">\n    <path d=\"M 903.5 507.038438 \nL 903.5 17.798438 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_5\">\n    <path d=\"M 10.7 507.038438 \nL 903.5 507.038438 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_6\">\n    <path d=\"M 10.7 17.798438 \nL 903.5 17.798438 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"legend_1\">\n    <g id=\"patch_7\">\n     <path d=\"M 773.165625 40.754688 \nL 896.5 40.754688 \nQ 898.5 40.754688 898.5 38.754688 \nL 898.5 24.798438 \nQ 898.5 22.798438 896.5 22.798438 \nL 773.165625 22.798438 \nQ 771.165625 22.798438 771.165625 24.798438 \nL 771.165625 38.754688 \nQ 771.165625 40.754688 773.165625 40.754688 \nz\n\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;\"/>\n    </g>\n    <g id=\"line2d_7\">\n     <path d=\"M 775.165625 30.896875 \nL 795.165625 30.896875 \n\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n    </g>\n    <g id=\"line2d_8\"/>\n    <g id=\"text_7\">\n     <!-- sum_return (right) -->\n     <g transform=\"translate(803.165625 34.396875)scale(0.1 -0.1)\">\n      <defs>\n       <path d=\"M 2834 3397 \nL 2834 2853 \nQ 2591 2978 2328 3040 \nQ 2066 3103 1784 3103 \nQ 1356 3103 1142 2972 \nQ 928 2841 928 2578 \nQ 928 2378 1081 2264 \nQ 1234 2150 1697 2047 \nL 1894 2003 \nQ 2506 1872 2764 1633 \nQ 3022 1394 3022 966 \nQ 3022 478 2636 193 \nQ 2250 -91 1575 -91 \nQ 1294 -91 989 -36 \nQ 684 19 347 128 \nL 347 722 \nQ 666 556 975 473 \nQ 1284 391 1588 391 \nQ 1994 391 2212 530 \nQ 2431 669 2431 922 \nQ 2431 1156 2273 1281 \nQ 2116 1406 1581 1522 \nL 1381 1569 \nQ 847 1681 609 1914 \nQ 372 2147 372 2553 \nQ 372 3047 722 3315 \nQ 1072 3584 1716 3584 \nQ 2034 3584 2315 3537 \nQ 2597 3491 2834 3397 \nz\n\" id=\"DejaVuSans-73\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 544 1381 \nL 544 3500 \nL 1119 3500 \nL 1119 1403 \nQ 1119 906 1312 657 \nQ 1506 409 1894 409 \nQ 2359 409 2629 706 \nQ 2900 1003 2900 1516 \nL 2900 3500 \nL 3475 3500 \nL 3475 0 \nL 2900 0 \nL 2900 538 \nQ 2691 219 2414 64 \nQ 2138 -91 1772 -91 \nQ 1169 -91 856 284 \nQ 544 659 544 1381 \nz\nM 1991 3584 \nL 1991 3584 \nz\n\" id=\"DejaVuSans-75\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 3328 2828 \nQ 3544 3216 3844 3400 \nQ 4144 3584 4550 3584 \nQ 5097 3584 5394 3201 \nQ 5691 2819 5691 2113 \nL 5691 0 \nL 5113 0 \nL 5113 2094 \nQ 5113 2597 4934 2840 \nQ 4756 3084 4391 3084 \nQ 3944 3084 3684 2787 \nQ 3425 2491 3425 1978 \nL 3425 0 \nL 2847 0 \nL 2847 2094 \nQ 2847 2600 2669 2842 \nQ 2491 3084 2119 3084 \nQ 1678 3084 1418 2786 \nQ 1159 2488 1159 1978 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1356 3278 1631 3431 \nQ 1906 3584 2284 3584 \nQ 2666 3584 2933 3390 \nQ 3200 3197 3328 2828 \nz\n\" id=\"DejaVuSans-6d\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 3263 -1063 \nL 3263 -1509 \nL -63 -1509 \nL -63 -1063 \nL 3263 -1063 \nz\n\" id=\"DejaVuSans-5f\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 2631 2963 \nQ 2534 3019 2420 3045 \nQ 2306 3072 2169 3072 \nQ 1681 3072 1420 2755 \nQ 1159 2438 1159 1844 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1341 3275 1631 3429 \nQ 1922 3584 2338 3584 \nQ 2397 3584 2469 3576 \nQ 2541 3569 2628 3553 \nL 2631 2963 \nz\n\" id=\"DejaVuSans-72\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 3597 1894 \nL 3597 1613 \nL 953 1613 \nQ 991 1019 1311 708 \nQ 1631 397 2203 397 \nQ 2534 397 2845 478 \nQ 3156 559 3463 722 \nL 3463 178 \nQ 3153 47 2828 -22 \nQ 2503 -91 2169 -91 \nQ 1331 -91 842 396 \nQ 353 884 353 1716 \nQ 353 2575 817 3079 \nQ 1281 3584 2069 3584 \nQ 2775 3584 3186 3129 \nQ 3597 2675 3597 1894 \nz\nM 3022 2063 \nQ 3016 2534 2758 2815 \nQ 2500 3097 2075 3097 \nQ 1594 3097 1305 2825 \nQ 1016 2553 972 2059 \nL 3022 2063 \nz\n\" id=\"DejaVuSans-65\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 1172 4494 \nL 1172 3500 \nL 2356 3500 \nL 2356 3053 \nL 1172 3053 \nL 1172 1153 \nQ 1172 725 1289 603 \nQ 1406 481 1766 481 \nL 2356 481 \nL 2356 0 \nL 1766 0 \nQ 1100 0 847 248 \nQ 594 497 594 1153 \nL 594 3053 \nL 172 3053 \nL 172 3500 \nL 594 3500 \nL 594 4494 \nL 1172 4494 \nz\n\" id=\"DejaVuSans-74\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 3513 2113 \nL 3513 0 \nL 2938 0 \nL 2938 2094 \nQ 2938 2591 2744 2837 \nQ 2550 3084 2163 3084 \nQ 1697 3084 1428 2787 \nQ 1159 2491 1159 1978 \nL 1159 0 \nL 581 0 \nL 581 3500 \nL 1159 3500 \nL 1159 2956 \nQ 1366 3272 1645 3428 \nQ 1925 3584 2291 3584 \nQ 2894 3584 3203 3211 \nQ 3513 2838 3513 2113 \nz\n\" id=\"DejaVuSans-6e\" transform=\"scale(0.015625)\"/>\n       <path id=\"DejaVuSans-20\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 1984 4856 \nQ 1566 4138 1362 3434 \nQ 1159 2731 1159 2009 \nQ 1159 1288 1364 580 \nQ 1569 -128 1984 -844 \nL 1484 -844 \nQ 1016 -109 783 600 \nQ 550 1309 550 2009 \nQ 550 2706 781 3412 \nQ 1013 4119 1484 4856 \nL 1984 4856 \nz\n\" id=\"DejaVuSans-28\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 603 3500 \nL 1178 3500 \nL 1178 0 \nL 603 0 \nL 603 3500 \nz\nM 603 4863 \nL 1178 4863 \nL 1178 4134 \nL 603 4134 \nL 603 4863 \nz\n\" id=\"DejaVuSans-69\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 2906 1791 \nQ 2906 2416 2648 2759 \nQ 2391 3103 1925 3103 \nQ 1463 3103 1205 2759 \nQ 947 2416 947 1791 \nQ 947 1169 1205 825 \nQ 1463 481 1925 481 \nQ 2391 481 2648 825 \nQ 2906 1169 2906 1791 \nz\nM 3481 434 \nQ 3481 -459 3084 -895 \nQ 2688 -1331 1869 -1331 \nQ 1566 -1331 1297 -1286 \nQ 1028 -1241 775 -1147 \nL 775 -588 \nQ 1028 -725 1275 -790 \nQ 1522 -856 1778 -856 \nQ 2344 -856 2625 -561 \nQ 2906 -266 2906 331 \nL 2906 616 \nQ 2728 306 2450 153 \nQ 2172 0 1784 0 \nQ 1141 0 747 490 \nQ 353 981 353 1791 \nQ 353 2603 747 3093 \nQ 1141 3584 1784 3584 \nQ 2172 3584 2450 3431 \nQ 2728 3278 2906 2969 \nL 2906 3500 \nL 3481 3500 \nL 3481 434 \nz\n\" id=\"DejaVuSans-67\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 3513 2113 \nL 3513 0 \nL 2938 0 \nL 2938 2094 \nQ 2938 2591 2744 2837 \nQ 2550 3084 2163 3084 \nQ 1697 3084 1428 2787 \nQ 1159 2491 1159 1978 \nL 1159 0 \nL 581 0 \nL 581 4863 \nL 1159 4863 \nL 1159 2956 \nQ 1366 3272 1645 3428 \nQ 1925 3584 2291 3584 \nQ 2894 3584 3203 3211 \nQ 3513 2838 3513 2113 \nz\n\" id=\"DejaVuSans-68\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 513 4856 \nL 1013 4856 \nQ 1481 4119 1714 3412 \nQ 1947 2706 1947 2009 \nQ 1947 1309 1714 600 \nQ 1481 -109 1013 -844 \nL 513 -844 \nQ 928 -128 1133 580 \nQ 1338 1288 1338 2009 \nQ 1338 2731 1133 3434 \nQ 928 4138 513 4856 \nz\n\" id=\"DejaVuSans-29\" transform=\"scale(0.015625)\"/>\n      </defs>\n      <use xlink:href=\"#DejaVuSans-73\"/>\n      <use x=\"52.099609\" xlink:href=\"#DejaVuSans-75\"/>\n      <use x=\"115.478516\" xlink:href=\"#DejaVuSans-6d\"/>\n      <use x=\"212.890625\" xlink:href=\"#DejaVuSans-5f\"/>\n      <use x=\"262.890625\" xlink:href=\"#DejaVuSans-72\"/>\n      <use x=\"301.753906\" xlink:href=\"#DejaVuSans-65\"/>\n      <use x=\"363.277344\" xlink:href=\"#DejaVuSans-74\"/>\n      <use x=\"402.486328\" xlink:href=\"#DejaVuSans-75\"/>\n      <use x=\"465.865234\" xlink:href=\"#DejaVuSans-72\"/>\n      <use x=\"505.228516\" xlink:href=\"#DejaVuSans-6e\"/>\n      <use x=\"568.607422\" xlink:href=\"#DejaVuSans-20\"/>\n      <use x=\"600.394531\" xlink:href=\"#DejaVuSans-28\"/>\n      <use x=\"639.408203\" xlink:href=\"#DejaVuSans-72\"/>\n      <use x=\"680.521484\" xlink:href=\"#DejaVuSans-69\"/>\n      <use x=\"708.304688\" xlink:href=\"#DejaVuSans-67\"/>\n      <use x=\"771.78125\" xlink:href=\"#DejaVuSans-68\"/>\n      <use x=\"835.160156\" xlink:href=\"#DejaVuSans-74\"/>\n      <use x=\"874.369141\" xlink:href=\"#DejaVuSans-29\"/>\n     </g>\n    </g>\n   </g>\n  </g>\n  <g id=\"axes_2\">\n   <g id=\"matplotlib.axis_2\">\n    <g id=\"ytick_1\">\n     <g id=\"line2d_9\">\n      <defs>\n       <path d=\"M 0 0 \nL 3.5 0 \n\" id=\"m18c4d6f33d\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"903.5\" xlink:href=\"#m18c4d6f33d\" y=\"472.609864\"/>\n      </g>\n     </g>\n     <g id=\"text_8\">\n      <!-- 0.80 -->\n      <g transform=\"translate(910.5 476.409083)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 684 794 \nL 1344 794 \nL 1344 0 \nL 684 0 \nL 684 794 \nz\n\" id=\"DejaVuSans-2e\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-2e\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-38\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_2\">\n     <g id=\"line2d_10\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"903.5\" xlink:href=\"#m18c4d6f33d\" y=\"377.041957\"/>\n      </g>\n     </g>\n     <g id=\"text_9\">\n      <!-- 0.85 -->\n      <g transform=\"translate(910.5 380.841176)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 691 4666 \nL 3169 4666 \nL 3169 4134 \nL 1269 4134 \nL 1269 2991 \nQ 1406 3038 1543 3061 \nQ 1681 3084 1819 3084 \nQ 2600 3084 3056 2656 \nQ 3513 2228 3513 1497 \nQ 3513 744 3044 326 \nQ 2575 -91 1722 -91 \nQ 1428 -91 1123 -41 \nQ 819 9 494 109 \nL 494 744 \nQ 775 591 1075 516 \nQ 1375 441 1709 441 \nQ 2250 441 2565 725 \nQ 2881 1009 2881 1497 \nQ 2881 1984 2565 2268 \nQ 2250 2553 1709 2553 \nQ 1456 2553 1204 2497 \nQ 953 2441 691 2322 \nL 691 4666 \nz\n\" id=\"DejaVuSans-35\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-2e\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-38\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-35\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_3\">\n     <g id=\"line2d_11\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"903.5\" xlink:href=\"#m18c4d6f33d\" y=\"281.47405\"/>\n      </g>\n     </g>\n     <g id=\"text_10\">\n      <!-- 0.90 -->\n      <g transform=\"translate(910.5 285.273269)scale(0.1 -0.1)\">\n       <defs>\n        <path d=\"M 703 97 \nL 703 672 \nQ 941 559 1184 500 \nQ 1428 441 1663 441 \nQ 2288 441 2617 861 \nQ 2947 1281 2994 2138 \nQ 2813 1869 2534 1725 \nQ 2256 1581 1919 1581 \nQ 1219 1581 811 2004 \nQ 403 2428 403 3163 \nQ 403 3881 828 4315 \nQ 1253 4750 1959 4750 \nQ 2769 4750 3195 4129 \nQ 3622 3509 3622 2328 \nQ 3622 1225 3098 567 \nQ 2575 -91 1691 -91 \nQ 1453 -91 1209 -44 \nQ 966 3 703 97 \nz\nM 1959 2075 \nQ 2384 2075 2632 2365 \nQ 2881 2656 2881 3163 \nQ 2881 3666 2632 3958 \nQ 2384 4250 1959 4250 \nQ 1534 4250 1286 3958 \nQ 1038 3666 1038 3163 \nQ 1038 2656 1286 2365 \nQ 1534 2075 1959 2075 \nz\n\" id=\"DejaVuSans-39\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-2e\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-39\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_4\">\n     <g id=\"line2d_12\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"903.5\" xlink:href=\"#m18c4d6f33d\" y=\"185.906144\"/>\n      </g>\n     </g>\n     <g id=\"text_11\">\n      <!-- 0.95 -->\n      <g transform=\"translate(910.5 189.705362)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-2e\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-39\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-35\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_5\">\n     <g id=\"line2d_13\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"903.5\" xlink:href=\"#m18c4d6f33d\" y=\"90.338237\"/>\n      </g>\n     </g>\n     <g id=\"text_12\">\n      <!-- 1.00 -->\n      <g transform=\"translate(910.5 94.137456)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-31\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-2e\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-30\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"text_13\">\n     <!-- 1e6 -->\n     <g transform=\"translate(884.621875 14.798438)scale(0.1 -0.1)\">\n      <use xlink:href=\"#DejaVuSans-31\"/>\n      <use x=\"63.623047\" xlink:href=\"#DejaVuSans-65\"/>\n      <use x=\"125.146484\" xlink:href=\"#DejaVuSans-36\"/>\n     </g>\n    </g>\n   </g>\n   <g id=\"line2d_14\">\n    <path clip-path=\"url(#p9de19f8954)\" d=\"M 51.281818 101.67414 \nL 58.401435 119.398995 \nL 65.521053 147.167743 \nL 72.64067 136.47373 \nL 79.760287 71.704519 \nL 86.879904 59.498563 \nL 93.999522 62.148993 \nL 101.119139 71.723433 \nL 108.238756 81.475477 \nL 115.358373 90.628993 \nL 122.47799 83.093919 \nL 129.597608 58.515683 \nL 136.717225 44.08622 \nL 143.836842 49.103201 \nL 150.956459 40.036619 \nL 158.076077 79.683092 \nL 165.195694 105.307396 \nL 172.315311 114.705969 \nL 179.434928 97.713553 \nL 186.554545 86.190454 \nL 193.674163 95.239892 \nL 200.79378 141.400558 \nL 207.913397 127.623124 \nL 215.033014 93.87472 \nL 222.152632 73.076064 \nL 229.272249 62.313187 \nL 236.391866 53.904765 \nL 243.511483 91.18456 \nL 250.6311 131.307552 \nL 257.750718 119.179488 \nL 264.870335 132.777003 \nL 271.989952 162.754834 \nL 279.109569 177.095175 \nL 286.229187 169.676085 \nL 293.348804 134.711635 \nL 300.468421 154.859536 \nL 307.588038 158.493356 \nL 314.707656 211.509838 \nL 321.827273 237.945144 \nL 328.94689 237.289148 \nL 336.066507 286.829493 \nL 343.186124 261.69071 \nL 350.305742 222.877781 \nL 357.425359 274.103833 \nL 364.544976 293.722629 \nL 371.664593 307.720447 \nL 378.784211 319.615806 \nL 385.903828 317.153577 \nL 393.023445 318.16863 \nL 400.143062 359.5402 \nL 407.262679 393.000352 \nL 414.382297 399.934027 \nL 421.501914 401.426679 \nL 428.621531 415.875544 \nL 435.741148 417.954042 \nL 442.860766 418.846277 \nL 449.980383 431.342227 \nL 457.1 434.089165 \nL 464.219617 423.023535 \nL 471.339234 421.018951 \nL 478.458852 413.897783 \nL 485.578469 415.636597 \nL 492.698086 393.360297 \nL 499.817703 372.345958 \nL 506.937321 367.655988 \nL 514.056938 387.588421 \nL 521.176555 386.887528 \nL 528.296172 408.499331 \nL 535.415789 405.904142 \nL 542.535407 409.170666 \nL 549.655024 405.205115 \nL 556.774641 380.003519 \nL 563.894258 387.628339 \nL 571.013876 402.544341 \nL 578.133493 412.227117 \nL 585.25311 372.642756 \nL 592.372727 389.592777 \nL 599.492344 424.178371 \nL 606.611962 454.988095 \nL 613.731579 435.471451 \nL 620.851196 438.229171 \nL 627.970813 440.652678 \nL 635.090431 435.690301 \nL 642.210048 433.9345 \nL 649.329665 449.488209 \nL 656.449282 451.979964 \nL 663.5689 440.518329 \nL 670.688517 431.810804 \nL 677.808134 414.184028 \nL 684.927751 429.239423 \nL 692.047368 434.607062 \nL 699.166986 438.524487 \nL 706.286603 464.61617 \nL 713.40622 484.800256 \nL 720.525837 473.412075 \nL 727.645455 464.0746 \nL 734.765072 472.779334 \nL 741.884689 458.728796 \nL 749.004306 414.662692 \nL 756.123923 415.936927 \nL 763.243541 428.865733 \nL 770.363158 427.413314 \nL 777.482775 436.622676 \nL 784.602392 434.364307 \nL 791.72201 444.066753 \nL 798.841627 408.561306 \nL 805.961244 418.75456 \nL 813.080861 425.548939 \nL 820.200478 436.334326 \nL 827.320096 401.665167 \nL 834.439713 392.455769 \nL 841.55933 389.535603 \nL 848.678947 402.125228 \nL 855.798565 403.899292 \nL 862.918182 410.014766 \n\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n   </g>\n   <g id=\"patch_8\">\n    <path d=\"M 10.7 507.038437 \nL 10.7 17.798437 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_9\">\n    <path d=\"M 903.5 507.038437 \nL 903.5 17.798437 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_10\">\n    <path d=\"M 10.7 507.038438 \nL 903.5 507.038438 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_11\">\n    <path d=\"M 10.7 17.798438 \nL 903.5 17.798438 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n  </g>\n </g>\n <defs>\n  <clipPath id=\"p9de19f8954\">\n   <rect height=\"489.24\" width=\"892.8\" x=\"10.7\" y=\"17.798438\"/>\n  </clipPath>\n </defs>\n</svg>\n",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6sAAAITCAYAAADhDIopAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAACEuUlEQVR4nOzdZ3Rc1dmG4efMqPfem4uKe29gmw6m9056QshHEkISCOkJ6Z2EkJBGKCF0CL2DjSvGTa6yLcuy1XvvmjnfD0nGRV0zmtHMfa2lBZ455+zXtmzr0d773YZpmgIAAAAAwJ1YXF0AAAAAAAAnI6wCAAAAANwOYRUAAAAA4HYIqwAAAAAAt0NYBQAAAAC4HcIqAAAAAMDtEFYBAAAAYIIzDOMhwzAqDcPYPczrrzMMY69hGHsMw/ivs+sbDYNzVgEAAABgYjMMY6WkZkmPmqY5c4hrMyU9Lels0zTrDMOIM02zcjzqHAlmVgEAAABggjNN8wNJtce/ZhjGFMMw3jAMY6thGGsNw8jpfesLkh4wTbOu9163C6oSYRUAAAAAPNXfJX3FNM0Fkr4p6S+9r2dJyjIMY71hGJsMw1jlsgoH4ePqAgAAAAAAjmUYRoik0yQ9YxhG38v+vf/1kZQp6UxJKZI+MAxjlmma9eNc5qAIqwAAAADgeSyS6k3TnNvPe8WSPjRNs0vSYcMwDqgnvH40jvUNiWXAAAAAAOBhTNNsVE8QvVaSjB5zet/+n3pmVWUYRox6lgUXuKDMQRFWAQAAAGCCMwzjCUkbJWUbhlFsGMbnJN0s6XOGYeRK2iPp8t7L35RUYxjGXknvS7rLNM0aV9Q9GI6uAQAAAAC4HWZWAQAAAABuh7AKAAAAAHA7I+oGbLFYzMDAQGfVAgAAAABwkcDAQNXU1FSbphnr6lqkEYbVwMBAtbS0OKsWAAAAAIALGYYR5Ooa+rAMGAAAAADgdgirAAAAAAC3Q1gFAAAAALidEe1ZBQAAAOA5urq6VFxcrPb2dleXgnEWEBCglJQU+fr6urqUARFWAQAAAC9VXFys0NBQZWRkyDAMV5eDcWKapmpqalRcXKxJkya5upwBsQwYAAAA8FLt7e2Kjo4mqHoZwzAUHR3t9jPqhFUAAADAixFUvdNE+H0nrAIAAAAA3A5hFQAAAAB63XfffWptbXXa89va2nTGGWfIZrP1+/5pp5025DMyMjJUXV19yuurV6/Whg0bjv34z3/+sx566KHRF+tihFUAAAAAXmWgoCiNLqx2d3cP+9qHHnpIV111laxWa7/POD5sjtTJYfWzn/2s7r///lE/z9XoBgwAAABAP355j/aWNjr0mdOTwvTDS2cM+H5LS4uuu+46FRcXy2az6fvf/76uv/56ZWRkaMuWLYqJidGWLVv0zW9+U6tXr9aPfvQjHT58WAUFBTp69Kj+8Ic/aNOmTXr99deVnJysl19+ecCjWDIyMnT99dfr7bff1t13362oqCj98Ic/VEdHh6ZMmaJ///vfeuihh1RaWqqzzjpLMTExev/99xUSEqLm5mZJ0rPPPqtXXnlFDz/8sD796U8rICBA27dv1+mnn67a2lqFhYVpy5YtKi8v169//Wtdc801p9Tx+OOP67///a+knnD5/e9/X5GRkcrLy9OBAweOjWe32/XlL39Z7733nlJTU+Xr66vPfvazx555//336+WXX1ZXV5eeeeYZBQQE6MEHH5TVatV//vMf3X///VqxYoUyMjK0efNmLV68eKy/neOOmVUAAAAALvHGG28oKSlJubm52r17t1atWjXkPYcOHdJ7772nl156SbfccovOOuss7dq1S4GBgXr11VcHvTc6Olrbtm3Tueeeq5/+9Kd65513tG3bNi1cuFC///3v9dWvflVJSUl6//339f777w9ZS3FxsTZs2KDf//73kqSysjKtW7dOr7zyiu65555Tru/s7FRBQYEyMjKOvbZt2zb98Y9/1IEDB0649vnnn1dhYaH27t2rxx57TBs3bjzh/ZiYGG3btk1f+tKX9Nvf/lYZGRm67bbbdOedd2rHjh1asWKFJGnhwoVau3btkD8Xd8TMKgAAAIBBZ0CdZdasWfrGN76hb33rW7rkkkuOBazBXHjhhfL19dWsWbNks9mOBdxZs2apsLBw0Huvv/56SdKmTZu0d+9enX766ZJ6QuSyZctGXP+11157wnLeK664QhaLRdOnT1dFRcUp11dXVysiIuKE1xYvXtzvWafr1q3TtddeK4vFooSEBJ111lknvH/VVVdJkhYsWKDnn39+wBrj4uKUl5c3kp+W2yCsAgAAAHCJrKwsbdu2Ta+99pq+973v6ZxzztEPfvAD+fj4yG63S9IpZ4H6+/tLkiwWi3x9fY8dwWKxWIbcOxocHCxJMk1T5513np544okhazz+iJeTa+l73sm19Y1xssDAwCGfMVx9Y1mt1kF/3u3t7QoMDBzVGK7GMmAAAAAALlFaWqqgoCDdcsstuuuuu7Rt2zZJPftLt27dKkl67rnnHD7u0qVLtX79euXn50vq2Tvbtww3NDRUTU1Nx66Nj4/Xvn37ZLfb9cILL4xp3MjISNlstlMCa39OP/10Pffcc7Lb7aqoqNDq1auHvOfk2iXpwIEDmjlz5mhLdinCKgAAAACX2LVrlxYvXqy5c+fqxz/+sb73ve9Jkn74wx/qjjvu0MKFC0/pmusIsbGxevjhh3XjjTdq9uzZWrZs2bGlsrfeeqtWrVp1bNntL3/5S11yySU67bTTlJiYOOaxzz//fK1bt27I666++mqlpKRo+vTpuuWWWzR//nyFh4cPes+ll16qF154QXPnzj22T3X9+vU677zzxly3Kxj9TU8PJDg42GxpaXFiOQAAAADGy759+zRt2jRXl+FVtm3bpj/84Q967LHHhry2ublZISEhqqmp0eLFi7V+/XolJCQMe6zt27fr97///YBj9ff7bxhGq2mao1ub7GDsWQUAAACAcTJ//nydddZZstlsQ84aX3LJJaqvr1dnZ6e+//3vjyioSj0NnX7yk5+MpVyXYmYVAAAA8FKeOLN65ZVX6vDhwye89qtf/UoXXHCBiypyX8yswut02+z60uPblBkXortX5bi6HAAAAAzCNM0TOt5OdGNtguQtRjJp6So0WILD/fL1PL29t0Jv7Cl3dSkAAAAYREBAgGpqaiZEcIHjmKapmpoaBQQEuLqUQTGzCod6ObdU/1x3WFHBfiqsblFbp02Bfo7v4AYAAICxS0lJUXFxsaqqqlxdCsZZQECAUlJSXF3GoAircJgDFU361nM7tSA9Up86LUNffWK7DlY2aXZKhKtLAwAAQD98fX01adIkV5cB9ItlwBhQa2e3bvj7Rv32zf3q7LYPem1je5e++NhWBfv76C83z9fs5J4zoPLKmga9DwAAAAD6w8wqBvTfD49qU0GtNhXUas2BKt13w1xNiQ055Tq73dQ3ns5VUW2r/vuFpYoPC5DdbirQ16p95Y0uqBwAAADARMfMKvrV3mXTg2sKdPrUaD14y3wV1bXq4j+t1X82HTllA/5f1xzS23sr9J2LpmnxpChJksViKDshlJlVAAAAAKNCWEW/nth8VNXNHfrq2ZlaNTNRb35tpRZlROl7/9utzz+yRdXNHZKkNQeq9Nu39uvyuUn6zOkZJzxjWmKo8sob6S4HAAAAYMQIqzhFz6zqIS2ZFKUlk6MlSfFhAXrkM4v1w0una21+tVbd94Ge3HxUdzy5XdnxofrFVbNOOZ8rJyFMda1dqmzqcMVPAwAAAMAERljFKZ7eUqSKxg7dcW7mCa9bLIY+c/okvfKV5YoJ8dc9z++SzW7qwVsWKMjv1O3POQmhkqR9ZexbBQAAADAyNFjCCTq6bfrr6kNalBGpZb2zqifLig/Vi18+Xf9eX6gF6ZHKiAnu97qchDBJUl55k87MjnNazQAAAAA8D2EVJ3hmS7HKGtr162tmn7Ks93j+PlbddsaUQZ8VHuSrxPAA5TGzCgAAAGCEWAaMYzq77frr6kOalxah5VNjHPLMnIRQ5ZXTERgAAADAyBBWcczz24pVUt+mO87JHHRWdSRyEsOUX9mszm67Q57n7bps/DoCAADAOxBWIaknBD2wOl9zUsJ1Rlasw56bkxCqbrupQ1XNDnumt/rn2gLN/tFbqmxsd3UpAAAAgNMRViFJemF7iYpq2/RVB86qStK0xL4mS+xbHYu39pTrZ6/tU1uXTduO1ru6HAAAAMDpCKtQt82uB97P18zkMJ2d49iuvZNiguVntbBvdQx2lzTojid3aFZyuCyGtJeGVQAAAPAChFXopdxSHalp1VfPduysqiT5Wi2aGheivDLC6miUN7Tr849sUWSQr/75qYWaHBuivaUNri4LAAAAcDrCqpez2U39+b18TUsM03nT450yRk5iKMuAR6G1s1uff/QjNbV36V+fXqS40ADNSArTnlJ+LQEAAOD5CKtO8v7+Sr29t8Ltu+B+VFirguoW3XbGZIfPqvaZlhCmisYO1bZ0OuX5nshuN/W1J3dob2mj7r9p3rG9vzOSwlTW0M6vJQAAADyej6sL8ET5lc36wiNb1G03FRXsp8vmJOmaBSmakRTmtEA4Wu/nVcrXauicac6ZVZV6ZlalniZLp01xzPmtnu5Xb+bprb0V+sEl03V2zse/NzOSwiVJe0obtCLTcV2bAQAAAHfDzKqDmaape1/Zq0Bfq+6/cZ6WTY7Wfz88qkvuX6dV963VPz4oUGWT+xw98v7+Si2eFKUQf+d93yInobcjMPtWh+Wpj47qb2sKdPOSNH3m9IwT3puR1PNryVJgAAAAeDpmVh3s3X2V+uBAlb538TRdOidJl85JUkNrl17eWapntxbrZ6/t0y/fyNOnT8vQ9y+Z7tJai+tadaCiWdctTHXqOLGh/ooJ8WPf6jBsPlyr776wWysyY/Sjy2acMhMfEeSn5IhAwioAAAA8HmHVgTq6bfrJq3s1JTZYnzot49jr4UG+umVpum5Zmq78ymY9uOaQ/rXusKYlhumaBSkuq3f1/ipJ0pnZjj2upj85CWEcXzOElo5ufeOZHUqODNSfb5ovX2v/Cx+mJ4VpDx2BAQAA4OFYBuxAD60r1JGaVv3g0hkDBo2pcSH61dWztXRylL7/v93Kr3RdgFu9v1KpUYGaEhvs9LFyEkK1v7xJNrvp9LEmqt+8uV/FdW36zTVzFB7oO+B1M5LCdLi6RS0d3eNYHQAAADC+CKsOUtHYrj+/d1DnTovXGVmDN76xWgz98YZ5CvKz6vbHt6ut0zZOVX6svcum9fk1Ojs7blyaPuUkhqmj267CmhanjzURfVhQo4c3FOpTyzK0eFLUoNfOSAqXaYqZagAAAHg0wqqD/Or1PHXZTH3/kmnDuj4+LEB/uH6u9lc06d5X9ji5ulN9eLhWbV02nZnj/CXAUs/MqkSTpf60ddp093M7lRYVpLtXZQ95/fTeJkt7WQoMAAAAD0ZYdYBtR+v0/PYSfX7FJKVHD39J7cqsWP3fmVP0xOYivbijxIkVnur9vEr5+1i0bHL0uIw3NS5EVotBk6V+/Pat/TpS06pfXT1bQX5DbyNPCg9QRJAvTZYAAADg0QirY2S3m/rxS3sUH+av28+aOuL7v35elhamR+o7z+/S4erxWyK7en+lTpsSrQBf67iMF+Br1eSYYO1jZvUEWwpr9dD6w7plaZqWTRneNw4Mw9CMpDDCKgAAADwaYXWMnt1WrNziBt1zYY6CR3FWqY/Voj/dOE++Phbd/vg2tXc5f//q4eoWFda06qxxWgLcJzshlJnV47R32XT3szuVFB6oey4c3vLxPjOSwrW/vEldNruTqgMAAABci7A6Bo3tXfr1G3manxahK+Ymj/o5SRGB+u01c7S3rFE/f22fAyvs3/t5lZKks8bhyJrjTUsMU3Fdmxrbu8Z1XHf1h7cPqKC6Rb+6erZCRviNjhlJYeq02ZVf2eyk6gAAAADXIqyOwf3vHlRNS6d+fNnMMXfUPXd6vD6/fJIe3XhEr+8qc1CF/Xt/f6WmxoUoNSrIqeOcrK/J0gG62Gr70Tr9Y22BblycpuWZMSO+f0ZvkyWWAgMAAMBTEVZHqdtm1yMbj+jKecmalRLukGfevSpHc1IjdPdzO1VU2+qQZ56spaNbHxbU6qzswY/XcYacxJ6Atc/Lw2p7l013PbtTCWEB+s5FOaN6xqSYEAX6WrWHjsAAAADwUITVUapq7lBnt10L0wc/E3Mk/Hws+vON8yRTuuPJ7U7Zj7jhUI06bfZxXwIs9XSxDQ3wUV6Zd88G/uODAuVXNusXV89WaIDvqJ5htRjKSQxlZhUAAAAei7A6SmUN7ZKkxPAAhz43NSpIP79qlrYdrdd97xxw6LOlniXAwX5WLcxwXMgeLsMwNC0hTHlePLNqmqae2lKkFZkxOiNrbLPb0xPDtK+0UXa76aDqAAAAAPdBWB2l8t6wmuDgsCpJl85J0nULU/SX1Ye0Ib/aYc81TVOr8yq1PDNGfj6u+a3PSQzV/vImrw1YO4rqVVzXpsvmJI35WTOSwtXU0a3iujYHVAYAAAC4F8LqKDlrZrXPjy6bockxwfraUztU09zhkGceqGhWaUO7zh7nI2uOl5MQpuaObpXUe2fAemVnmfysFp0/I2HMz/q4yRL7VgEAAOB5CKujVFbfpgBfi8IDR7fncChBfj66/8b5qm/r0l3P7pRpjn0m8r3eI2vOdMF+1T45iT0dgfd54b5Vu93UqzvLtDIr1iGfN9kJobJaDPatAgAAwCMRVkeprLFdieGBYz6yZjDTk8L03Yum6b28Sj20vnDMz3t/f6WmJ4YpPsw5s8HDkR3fE1a9cd/qliN1Km9s16VzEh3yvABfq6bGhjCzCgAAAI9EWB2l8oZ2py0BPt4nl6XrvOnx+uXr+7S7ZPShpKGtS1uP1OmsnPE/suZ4wf4+So8OUl65980GvpxbqgBfi86dFu+wZ85ICmNmFQAAAB6JsDpK5Q3tTmmudDLDMPTrq2crJsRfX3liu5o7ukf1nHUHq2Wzmy45suZk0xPDlFvU4JClzRNFt82u13aV6ZyceAX7+zjsudOTwlTZ1KGqJsfsawYAAADcBWF1FGx2UxWN4zOzKkmRwX667/q5OlLToh+8uHtUz3h/f6XCA301NzXCscWNwmlTolVS36bD1S2uLmXcbCqoVU1Lp8OWAPeZkRQuiSZLAAAA8DyE1VGoae5Qt91UQnjguI25ZHK0vnpOpp7fVqInNx8d0b12u6nV+6t0RlasfKyu/y1f2Xu+6AcHqlxcyfh5ObdUwX5Whze3mn6sIzBLgQEAAOBZXJ9cJqBjx9aMc6Oir5ydqRWZMfrBi3u0s7h+2PetPlCp6uYOl+9X7ZMeHaz06CB9cNBxZ8i6s85uu97YU67zZyQowNfq0GeHB/oqJTJQewmrAAAA8DCE1VEoa+g5I3Q89qwez2ox9Kcb5ik21F9f+s821bV0DnnPtqN1+vJ/tysrPkTnTR/72Z6OsjIzVhsP1aij2+bqUpxuXX6VGtq6dMlsxy4B7tPTZIllwAAAAPAshNVRODazOs5hVerZv/qXm+erqqlDdzy1Qzb7wE2K9pU16tMPbVZsqL/+87klCnFgY5+xWpkVq7Yum7YW1rm6FKd7ObdMYQE+WpHpnJntGUnhKqxpHXXzLQAAAMAdEVZHobyhXX4+FkUF+7lk/DmpEfrRZTP0wYEq/fHdg/1eU1DVrE/860MF+/voP59bojgXnq3an2VTouVrNbTmoPP3rVY0tuv/Ht/qkqWy7V02vb23QhfOTJSfj3P+uM3o3be6r4ylwAAAAPAchNVRKOs9Y9UwDJfVcOPiVF2zIEV/eveg3surOOG94rpW3fLPD2Wa0n8+v0SpUUEuqnJgIf4+WpAeqTX7nR9Wf/zyHr22q1y3PrZlWEunHWn1/ko1d3TrEgd3AT7esY7AYziHFwAAAHA3hNVRKG9oV4KLZyoNw9BPr5ip6Ylh+tqTO3S0plWSVNnUrlv++aGaOrr16OcWa0psiEvrHMzKrFjllTepsrHdaWO8n1ep13aV6/K5SapsHHrptKO9vLNM0cF+WjY52mljxIf5KzrYj47AAAAAcDrDMB4yDKPSMIx+z9Q0evzJMIx8wzB2GoYx/7j3PmUYxsHej08NNRZhdRTKGttcsl/1ZAG+Vj14ywJJ0m3/2aryhnZ94p+bVdnUoYc/s/jYjJu7Wtm7h9NZXYHbOm36wUu7NTUuRL+5Zo5+fHnP0un73jnglPFO1tLRrXf3VeiiWYlOPTLIMAxNTwojrAIAAGA8PCxp1SDvXygps/fjVkl/lSTDMKIk/VDSEkmLJf3QMIzIwQYirI6Q3W72zKyO4xmrg0mLDtIfrp+rvWWNOvt3q3W4ukX/+ORCLUgf9PfdLUxPDFNMiJ/Tzlv98/sHVVTbpp9eMVN+PhbduDhN1y9M1f3v5evtvRVDP2CM3tlXofYuu9O6AB9vRlK4DlY2qbPb7vSxAAAA4L1M0/xAUu0gl1wu6VGzxyZJEYZhJEq6QNLbpmnWmqZZJ+ltDR56CasjVdPSqS6b6RYzq33OmRavO87JVJfNrgdunq/Tp8a4uqRhsVgMrciM1br8atkdvDT3YEWT/v5Bga6en6Klxy3B/fHlMzQ7JVxff2qHCqqaHTrmyV7ZWab4MH8tyohy6jhST5OlLpupAxVNTh8LAAAAHs3HMIwtx33cOsL7kyUVHffj4t7XBnp9QITVESrvPbZmvM9YHcqd52Vpxw/O13nT411dyoiszIpRbUundjvwnFDTNPXd/+1WkJ+PvnNRzgnvBfha9ddbFsjXx6Lb/rNVLU467qWhrUtr9lfpktlJslic34hrWmJPR+C8csIqAAAAxqTbNM2Fx3383VWFEFZHqKyhTZKU5CbLgI8X7EbnqA5X39mjjlwK/OzWYm0+XKtvX5ij6BD/U95PjgjU/TfOU35ls7713E6ZpuMbLr29t0KdtvFZAixJGdFB8vexKI/jawAAAOBaJZJSj/txSu9rA70+IMLqCJU3uufM6kQVE+Kvmclh+uCAY5os1bV06uev7dOC9EhdtzB1wOtOnxqju1fl6JWdZfrXusMOGft4b+wuU3JEoOamRjj82f3xsVqUGR+i/SwDBgAAgGu9JOmTvV2Bl0pqME2zTNKbks43DCOyt7HS+b2vDYiwOkJlDe3ytRqKDvZzdSkeY2VmrLYdrVNje9eYn/XL1/PU1N6tn105c8jlt19cOVkXzkzQL17P046i+jGP3cc0TW07Wq/TpkSP61m8OQlhLAMGAACAUxmG8YSkjZKyDcMoNgzjc4Zh3GYYxm29l7wmqUBSvqR/SPo/STJNs1bSTyR91Ptxb+9rAyKsjlB5Q7viwwLGZR+it1iZFatuu6kN+TVjes5HhbV6akuRPrdiknISwoa83jAM/fqa2ZKk9/Y5rjtwcV2bals6NWecZlX75CSEqqqpQzXNHeM6LgAAALyHaZo3mqaZaJqmr2maKaZp/ss0zQdN03yw933TNM3bTdOcYprmLNM0txx370OmaU7t/fj3UGMRVkeotN49zlj1JPPTIhXsZ9UHB0e/b7Wz267vvrBLyRGBuuOczGHfFxrgq9TIQB2qbhn12Cfrm6UdryXAfbITQiVJ+5ldBQAAgAcgrI5QeaP7nLHqKfx8LFo2JUYfHKgadbOj57cV60BFs3546XQF+Y2s0dSU2BAdqnTcMTa5RfXy87EcC4/jpW82eR9hFQAAAB6AsDoCpmmqrKGdmVUnOCMrRsV1bTo8ihlO0zT1yMYjykkIHdXRPZNjg3W4usVhZ73mFtdrZlKYfK3j+8crNtRf0cF+2l9OR2AAAABMfITVEahr7VJnt10JYYRVRzsjK07S6I6w2XqkTvvKGvWJZemjamg0JTZEHd12ldS3jfjek3Xb7NpV0jDu+1X75CSG0mQJAAAAHsFjwmp1c4dezi116hjHzliNIKw6Wlp0kDKig/TBwZEfYfPIxiMKDfDRFXOTRzX25NgQSVKBA/atHqhoVnuXfdz3q/bJjg/TgYom2Rw0SwwAAAC4iseE1Uc3HtFXn9yuotpWp41R3tB3xip7Vp1hZVasNh6qUUe3bdj3VDa1643dZbpmQYqC/Ue2V7XPlNhgSXLIvtXc4npJ0pyUiDE/azRyEkPV3mXXUSf+OQAAAADGg8eE1esXpcqQ9ORHR502RllvWGXPqnOszIxVW5dNWwvrhn3Pk5uL1GUz9Yml6aMeNyrYT+GBviqodkBYLapXeKCv0qODxvys0cjpbeqUV8a+VQAAAExsHhNWkyMCdWZ2nJ7eUqwum90pY5Q1tMlqMRQT4u+U53u7ZVOi5Ws1tGaYR9h02ez674dHtSIz5thS3tEwDEOTY4N1qHLsy4B3FNVrTmrEqPbOOkJmXKgshti3CgAAgAnPY8KqJN20OE1VTR16d1+FU55f1tCu+FB/WS2uCSKeLtjfRwvSI/V+XuWwOvO+vbdC5Y3t+uSyjDGPPSU2ZMwzq62d3TpQ0aS5KeFjrme0Av2syogOVh4dgQEAADDBeVRYPTM7VonhAXr8Q+csBS5vaFcCS4Cd6qr5KTpQ0ay/ry0Y8tpHNxYqOSJQZ+fEjXncybHBqmjsUFN716ifsbukUXZTLusE3Cc7IVT7mVkFAADABOdRYdXHatH1i1K19mC1jtY4vsFMeUO7Emmu5FTXLkjRxbMS9Zs392vz4doBrztQ0aRNBbW6eWmaQ2a6p/QuIx7NOa99covqJUmzXdRcqU9OQpiO1LaqtbPbpXUAAAAAY+FRYVXqabRkMaQnHNxoyTRNlTW001zJyQzD0C+vnqXUyEB95Yltqm7u6Pe6xzYekZ+PRdcvTHXIuMc6AleNfinwjuJ6JUcEKjbUtXuasxNCZZo9x+gAAAAAE5XHhdXE8J5loc9sKVJnt+MaLTW2dauty8Yy4HEQGuCrv9y8QHWtXbrzqR2nnBna1N6l57cV65LZiYp2ULOrtKhgWS2GCqrGNrPqqvNVjzctsacj8H72rQIAAGAC87iwKkk3LUlTdXOn3nFgo6WyxjZJYhnwOJmeFKZ7L5uhtQer9cD7+Se89/y2ErV02hzSWKmPn49FaVFBo55ZrW7uUHFdm+akuq65Up/UyCAF+Vm1r4x9qwAAAJi4PDKsnpEVp+SIQP3XgY2Wyup7zlhlZnX8XL8oVVfNS9Yf3jmg9fnVknqWYz+26Yhmp4Q7fBZzSmzwqGdWdxbXS5LmuHi/qiRZLIay4mmyBAAAgInNI8Oq1WLo+kWpWpdfrcIxNMw5XllDT1hlz+r4MQxDP71ypqbGhuiOJ7ersrFdGw/VKL+y2aGzqn0mx4aooLrllGXHw7GjqEEWQ5qZ7PqZVUnKSQhVXnmjTHPkPxcAAADAHXhkWJV6ZuWsFsNhjZbKG9pkMeTy5jneJsjPR3+5eb5aOmz68hPb9dD6QkUG+eqS2YkOH2tKbLA6u+0qrW8b8b25RfXKig9VsL+Pw+sajeyEUNW1dqmqqf8GVQAAAIC789iwGh8WoHNy4vTslmKHNFoqa2hXbKi/fK0e+0vmtjLjQ/Xzq2Zq8+FavbOvQtctSlWAr9Xh40zuPb4mf4T7Vk3TVG5xvVssAe6TkxAmSdrHUmAAAABMUB6dvG5akqaalk69tbd8zM8qb+SMVVe6cl6KblycJn8fi25Zku6UMfrOWh3pvtWjta2qb+3SHDfoBNwnJ4GOwAAAAJjYPDqsrsiMdVijJc5Ydb2fXzlTG+45W6lRQU55flSwnyKCfEfcEXhHUb0kuUUn4D6RwX6KD/NXHh2BAQAAMEF5dFi1WgzduDhVGw7V6PAYGy2VN7TTCdjFDMNw2LmqA5kcE6yCEYbV3KIGBfhalBUf6qSqRic7IUx5LAMGAADABOXRYVWSrluYKh+LoSc2j352tbG9S80d3cyseoEpsSE6NMJlwLnF9ZqZFO52+5mnJYQqv7JZ3bax79kGAAAAxpt7fXXtBHFhATp3Wrye3Vqsjm7bqJ5R3tB3xip7Vj3d5NgQVTV1qLG9a1jXd9ns2l3S4Fb7VftkJ4Sq02YfdFVBZ7dd33wmV+sOVo9jZQAAAMDQPD6sStI1C1JU29KpLYV1o7qfM1a9x5TYYEnDb7K0v7xJHd12twyrfR2BB1sK/MiGQj27tVjffmGnQ7pmAwAAAI7iFWF16ZRoWS2GNhwa3exReUPPuZsJYYRVTzf5WEfg4e1bzS2ulyTNdaNja/pMiQuW1WIob4COwJVN7frjuweVER2koto2PbWlaJwrBAAAAAbmFWE1xN9Hs1PCteFQzajuL2tol2H0nN0Kz5YeHSQfizHsjsC5RfWKDPJVapT7LRH397Fqckyw9g8ws/rrN/aro9umhz69SIszonT/uwfV1jm6pfIAAACAo3lFWJWk06ZEa2dxg5o7ukd8b3lDu2JC/OXn4zW/XF7L12pRWlTQsJcB5xb17Fc1DMPJlY1OTmKY9vVzfM22o3V6dmuxPrd8sibHhuibF2SrsqlDj24sHP8iAQAAgH54Tfo6bUqMbHZTHx2uHfG9pZyx6lUmx4YMa2a1uaNbByqbNMcNlwD3yUkIVUl9m5qOaxhlt5v60Ut7FBfqry+fPVWStHhSlM7MjtVf1xwadnMpAAAAwJm8JqwuSI+Un9WijQUjXwpc3tDGflUvMiU2WIXVrbLZzUGv213SINOU5rphc6U+OQk9Z78eqPh4dvXZrcXaWdygb1+UoxB/n2Ovf/P8bNW3dumfaw+Pe50AAADAybwmrAb4WjUvLWJUTZbKmFn1KlNiQ9Rps6u4rnXQ63YU1UuSZqeEj0NVo5PdG1b7lgI3tHXpV2/kaUF6pK6Ym3zCtTOTw3XxrET9a22Bapo7xr1WAAAA4HheE1alnqXAe0obVd/aOex7mju61dTezRmrXmTyMI+vyS2qV2pUoKJD/MejrFFJjghUqL/PsSZLf3znoGpbO/Xjy2b0u8/2zvOy1NZl019WHxrvUgEAAIATeFVYXTYlWqYpfTiCfavlnLHqdab0Hl8z2L7VhrYurcuv1sL0qPEqa1QMw1B2Qqjyyht1sKJJj2ws1I2L0zQzuf/Z4KlxIbp6fooe23REpfVt41wtAAAA8DGvCqtzUyMU4GvRxhEcYdMXVhMIq14jMthPkUG+OjTIzOo/1xaoqb1bn18xaRwrG52cxFDllTfpRy/vUbCfVd88P3vQ6+84N1Omaer+9w6OU4UAAADAqbwqrPr5WLQoI2pEYbWsoWd2KYllwF5lsI7ANc0demjdYV08K1Ezktx3v2qf7IQwNbV3a31+jb5xfraigv0GvT4lMkg3L0nX01uKdbh6eEf4AAAAAI7mVWFV6lkKvL+iSVVNw2sgU9Y7sxoX5r77EuF4U2KDB9yz+rcPCtTWZdOd52WOc1Wj09cROCchVDcvSRvWPbefNVV+Vov+8PYBZ5YGAAAADMjrwuppU2IkSZuGeYRNWUO7ooP9FOBrdWZZcDOTY0NU3dyhhrYTzxytaGzXIxsKdcW8ZE2NC3VRdSMzKzlc5+TE6RdXzZKPdXh/5GND/fXZ5Rl6KbdUe0sbnVwhAAAAcCqvC6szk8IU4u8z7PNWyxva2K/qhfqaLBWctBT4gffzZbObuuOciTGrKvUc2/SvTy/SvLTIEd1364opCvX30UPrOXcVAAAA48/rwqqP1aIlk4a/b5UzVr1T3/E1xzdZKq5r1RObj+rahalKjw52VWnjJjzIV6dPjRn2KgRH6LbZlV85cBdmAAAAeA+vC6tSz77Vw9Utx5onDaa8sZ2ZVS+UFhUkH4txwszq/e/myzAMffWcqS6sbHwtmhSl4rq2Yf1ZcYSntxTr/D+sGfTYIAAAAHgHrw2rkoacXW3rtKm+tUuJdAL2Or5Wi9Kig441WTpc3aJntxXr5iVpXvX5sDij5xzZjwrrxmW8LUdqZTelF3eUjst4AAAAcF9eGVanJYQpIshXG4YIq49/eESSND0xbDzKgpuZctzxNfe9c0B+Vou+dOYUF1c1vqYlhirYz6qPDteOy3i7ihskSS/uKJFpmuMyJgAAANyTV4ZVi8XQ0knR2nioZsAviA9Xt+g3b+7XOTlxOjM7dpwrhDuYHBusIzWt2lvaqJdyS/Wp0zIUF+pdS8J9rBbNT4/UR4XOD6stHd3Kr2pWRnSQjtS0Krc3uAIAAMA7eWVYlaTTpkarpL5NRbWn7sWz2U3d9Uyu/H0s+vlVs2QYhgsqhKtNiQ1Rp82uu5/LVYifj247Y7KrS3KJRRlR2l/RpIbWrqEvHoM9pY0yTenO87Lk52PR/7aXOHU8AAAAuDfvDat9+1YLqk957+ENhdpypE4/vHSG4sO8ayYNH5vS2xF4d0mjPrdikiKC/FxckWssyoiSaUpbjzp3dnVncb2knj3lZ2fH6ZWdZeq22Z06JgAAANyX14bVKbEhig31P2Xfas/y3zydnROnq+Ynu6g6uIPJMT1nrUYE+eqzyye5uBrXmZcWIV+roc2HndtkaVdJgxLDAxQXGqAr5iWpurljyH3lAAAA8FxeG1YNw9CyydHacNy+Vbvd1N3P5srPatEvWP7r9SKD/XR2Tpy+fWGOwgJ8XV2OywT4WjUrOdzp+1Z3Fjdodkq4JOnM7DiFBvjQFRgAAMCLeW1YlXqWG1Y1dehQ7/EkD28o1EeFdfoBy3/R66FPL9L1i9JcXYbLLZoUpZ3F9Wrvsjnl+Q1tXTpc3aLZKRGSegLyhTMT9OaecqeNCQAAAPfm1WH12L7VQ9U6XN2iX/cu/72a5b/ACRalR6nLZmpHUb1Tnr+npKfz76zk8GOvXT43Wc0d3Xp3X6VTxgQAAIB78+qwmhYVpOSIQK3Pr9Hdz+bK12rRz69k+S9wsoUZkZKkLU5aCryzn7C6dHK04kL99eIOugIDAAB4I68Oq4ZhaOnkaL2xp1wfFfZ0/00IZ/kvcLKIID9lx4dqc6FzmiztKm5QalSgIoM/7rhstRi6dE6SVu+vcvqxOQAAAHA/Xh1WpY+XArP8FxjcokmR2nakTja76fBn7yyp1+zkiFNev2Jusjptdr2+u8zhYwIAAMC9eX1YPX9GvD65LF2/pPsvMKhFGVFq7ujWvrJGhz63rqVTRbVtmpUSfsp7M5PDNDkmWP9jKTAAAIDX8fqwGhrgq3svn6k4uv8Cg1qUESVJ2nzYsftWd/XuV52dfGpYNQxDl89N1oeHa1XW0ObQcQEAAODevD6sAhiepIhAJUcEassR54TVmf3MrErS5XOTZJrSy7mcuQoAAOBNCKsAhm3xpChtPlwn03TcvtXconpNjglWWIBvv+9nxARrTmqEXtxBWAUAAPAmhFUAw7YoI0rVzR0qrGl12DN3lTT0u1/1eJfPSdKe0kblVzY5bFwAAAC4N8IqgGFbPKnnvNWPHLRvtbKpXWUN7Secr9qfS+YkymKI2VUAAAAvQlgFMGxTYkMUGeSrzYWOCau7+5orpUQMel1caIBOnxqjF3eUOnQJMgAAANwXYRXAsBmGoYUZUdrioLC6s7hBhiHNSAob8tor5ibraG2rPv/IFu0pbXDI+AAAAHBfhFUAI7I4I0qFNa2qbGof87N2FTdoamyIgv19hrz2innJuuuCbH1UWKuL/7ROtz22VfvL2cMKAADgqQirAEZk0aSe81Y/Olw3pueYpqmdw2iu1MdqMXT7WVO17p6zdcc5mVqfX61Vf/xAX/7vNuVXNo+pFgAAALgfwiqAEZmRFKZAX6s+GuNS4IrGDlU1dWj2EM2VThYW4Ks7z8vS2m+dpS+dMUXv5VXq/D+s0def2qH2LtuYagIAAID7IKwCGBFfq0Xz0iLGHFZ3FtdLkmanRozq/oggP929Kkdr7z5LnzotQ89vL9ErO8vGVBMAAADcB2EVwIgtyojSvrJGNbV3jfoZO4sbZLUYmp44dHOlwUSH+Os7F02T1WLoSE3LmJ4FAAAA90FYBTBiiydFyW5KW4+Mft/qzpIGZcWHKsDXOuZ6fK0WJUUE6Ght65ifBQAAAPdAWAUwYvPSImS1GKNeCmyapnYV1494v+pg0qKCdKSGsAoAAOApCKsARizIz0ezksP1zt5K2e3miO8vrmtTXWvXsDsBD0daVJCKmFkFAADwGIRVAKPyiaXp2l/RpLf2Voz43l0lDZKk2Q4Nq8GqaelUc0e3w54JAAAA1yGsAhiVy+cmKSM6SH9696BMc2SzqzuLG+RrNZSdEOqwetKigiRJR1kKDAAA4BEIqwBGxcdq0ZfPztTeska9PcLZ1V0l9cpJCJO/z9ibK/U5FlZZCgwAAOARCKsARu2KuUlKjw7SH0cwu2qapnYWNzh0CbAkpUX3hVWOrwEAAPAEhFUAo+Zjtej2s6ZqT2mj3t1XOax7Cmta1dTe7fCwGh7oq/BAX2ZWAQAAPARhFcCYXDkvWalRgbrv3QPDml3dWVwvSZqVHOHwWtKjg3S0ts3hzwUAAMD4I6wCGBNfq0VfPmuqdpc06r28wWdXG1q79OCaAoUG+CgzPsThtaRGBeloDcuAAQAAPAFhFcCYXTU/RSmRgYPuXW1q79In/71Zhyqb9eeb5svX6vi/ftKiglRc1ybbKM5+BQAAgHshrAIYs77Z1Z3FDVq9v+qU99s6bfrcw1u0u6RBf75pns7IinVKHelRQeq2myprYCkwAADAREdYBeAQV81PUXJEoO47aXa1vcumWx/boi1HanXf9XN1/owEp9XAWasAAACeg7AKwCH8fHo6A+cW1WvNgZ7Z1S6bXV/+7zatPVitX109W5fOSXJqDamctQoAAOAxCKsAHOaaBT2zq39896C6bXZ97akdemdfpX5y+QxduzDV6eMnRQTKx2LoCGEVAABgwiOsAnAYPx+LvnTmFG0/Wq8b/r5Jr+4s03cvmqZPLMsYl/GtFkMpkYHMrAIAAHgAwioAh7p2YYoSwwO05Uid7jw3S19YOXlcx0+LDlYRYRUAAGDC83F1AQA8i7+PVX+6cZ4Kqpp13Tgs/T1ZWlSgcovqx31cAAAAOBZhFYDDLcqI0qKMKJeMnRYVpIa2LjW0dik8yNclNQAAAGDsWAYMwKOkRQVLkorqWAoMAAAwkRFWAXiUvrNWj3DWKgAAwIRGWAXgUdKiOWsVAADAExBWAXiUEH8fRQf76Whti6tLAQAA8DiGYawyDGO/YRj5hmHc08/76YZhvGsYxk7DMFYbhpFy3Hs2wzB29H68NNRYNFgC4HFSo4KYWQUAAHAwwzCskh6QdJ6kYkkfGYbxkmmae4+77LeSHjVN8xHDMM6W9AtJn+h9r800zbnDHY+ZVQAeJz2asAoAAOAEiyXlm6ZZYJpmp6QnJV1+0jXTJb3X+//v9/P+sBFWAXictKgglda3q8tmd3UpAAAAniRZUtFxPy7ufe14uZKu6v3/KyWFGoYR3fvjAMMwthiGsckwjCuGGoywCsDjpEYFyWY3VVrf5upSAAAAJhqf3kDZ93HrCO//pqQzDMPYLukMSSWSbL3vpZumuVDSTZLuMwxjyqCFjLRyAHB36VEfdwROjw52cTUAAAATSndvoOxPiaTU436c0vvaMaZplqp3ZtUwjBBJV5umWd/7XknvfwsMw1gtaZ6kQwMVwswqAI/Td3wNZ60CAAA41EeSMg3DmGQYhp+kGySd0NXXMIwYwzD6cua3JT3U+3qkYRj+fddIOl3S8Y2ZTkFYBeBx4kMD5OdjURFNlgAAABzGNM1uSV+W9KakfZKeNk1zj2EY9xqGcVnvZWdK2m8YxgFJ8ZJ+1vv6NElbDMPIVU/jpV+e1EX4FIZpmsMuLjg42Gxp4exCAO7vnN+tVmZcqB78xAJXlwIAADBhGIbRapqmW+yjYmYVgEdK46xVAACACY2wCsAjpUcHq6i2VSNZPQIAAAD3QVgF4JFSo4LU1NGtutYuV5cCAACAUSCsAvBIaccdXwMAAICJh7AKwCOlHzu+hqZwAAAAExFhFYBHSo3sCascXwMAADAxEVYBeKRAP6tiQ/1ZBgwAADBBEVYBeKz0qCAdqSGsAgAATESEVQAeKy0qiGXAAAAAExRhFYDHSosOUlljuzq6ba4uBQAAACNEWAXgsdKigmSaUnFdm6tLAQAAwAgRVgF4LM5aBQAAmLgIqwA8VlrvWatHabIEAAAw4RBWAXis2BB/BfhamFkFAACYgAirADyWYRhKiwoirAIAAExAhFUAHi0tKphlwAAAABMQYRWAR+ubWTVN09WlAAAAYAQIqwA8Wnp0kNq6bKpu7nR1KQAAABgBwioAj/bx8TUtLq4EAAAAI0FYBeDRUjlrFQAAYEIirALwaKlRgfKzWrS3tNHVpQAAAGAECKsAPJq/j1UL0iO19mC1q0sBAADACBBWAXi85ZkxyitvUlVTh6tLAQAAwDARVgF4vBWZMZKk9fnMrgIAAEwUhFUAHm9GUrgignxZCgwAADCBEFYBeDyrxdDpU2K0Lr9Kpmm6uhwAAAAMA2EVgFdYnhmjisYOHapqdnUpAAAAGAbCKgCvsHxqz75VlgIDAABMDIRVAF4hNSpIGdFBWkdYBQAAmBAIqwC8xvLMGG0qqFGXze7qUgAAADAEwioAr7F8aqxaOm3afrTeZTWYpklYBgAAGAbCKgCvsWxKtCyGtO5glctqeGF7iRb97B21ddpcVgMAAMBEQFgF4DXCA301OyVCa/Ndt291w6Ea1bd2qbCmxWU1AAAATASEVQBeZUVmjHKL6tXQ1uWS8feVNUqSjhBWAQAABkVYBeBVlk+Nkd2UNh6qGfexu2x2HazoOef1SE3ruI8PAAAwkRBWAXiVeWmRCvKzal3++O9bLahqUWdvc6VCwioAAMCgCKsAvIqfj0VLJ0e75LzVviXAYQE+OlrLMmAAAIDBEFYBeJ3lU2NUWNOqotrxnd3cV9YoP6tFK7JiVVjNzCoAAMBgCKsAvM6KzBhJ0rpx7gq8t6xRU+NCNDU2RKUNbero5vgaAACAgRBWAXidqXEhig/zH/elwHnlTZqWGKb06CCZplRc1zau4wMAAEwkhFUAXscwDC2fGqv1h6pls5vjMmZ1c4eqmjo0LTFU6dHBkji+BgAAYDCEVQBeaUVmjOpbu7S3tHFcxutrrjQ9MUwZ0UGSOL4GAABgMIRVAF7p9Kk9+1bXjtMRNn1hdVpimKKC/RTi70NYBQAAGARhFYBXig31V05C6LjtW91X1qSEsABFBvvJMAylRwexDBgAAGAQhFUAXmv51BhtKaxTW6fzu/LuK2vUtMTQYz/uCavMrAIAAAzEx9UFAICrLM+M0T/XHdabe8o1OTZYVU0dxxohVTd3qqq5QxfNTNTFsxPHNE5Ht035lc06Oyfu2Gvp0cF6e2+FbHZTVosx1p8KAACAxyGsAvBaSyZFy8/Hoq89teOU90IDfNTZbVdFQ/uYw2p+ZbO67aamJYYdey09KkhdNlOl9W1KjQoa0/MBAAA8EWEVgNcK9LPq759YoLKGdsWE+Cs21F8xIX6KCfFXgK9V9zy3U+/sqxjzOPvKmiTpxLB67PiaVsIqAABAPwirALzamdlxA76XHh2s6uZONbV3KTTAd9Rj7CtrVICvRZNigo+9lhHTe3xNbYuWK2bUzwYAAPBUNFgCgAFM6g2UhdVja4S0r6xR2fGhJ+xNjQ8NkJ+PhSZLAAAAAyCsAsAAMnpnQg+P4YgZ0zR7OwGHnfC6xWIoPSpIhdUcXwMAANAfwioADCA9qndf6RgCZUVjh+pau04Jq1LP8TVHa5lZBQAA6A9hFQAGEOhnVWJ4wJhmVveVNUrSAGE1WEdqWmWa5qifDwAA4KkIqwAwiPTosS3V3dsbVrMTQk95LyM6SG1dNlU1dYz6+QAAAJ6KsAoAg5gUE6zCMTRB2lfWqOSIQIUHntpNOK33+JqxPB8AAMBTEVYBYBAZ0cGqbelUQ1vXqO7vr7nSx8/uPb5mDMuMAQAAPBVhFQAG0dcReDSBsr3LpsPVLZqeeOoSYElKigiU1WJwfA0AAEA/CKsAMIiM3qW6h0exb3V/eZPsZv/NlSTJ12pRSmSgCplZBQAAOAVhFQAGkd67VLeweuSzn4N1Av74+cEcXwMAANAPwioADCLA16qk8IBRzX7uK2tUsJ9VaVFBA16THjW2bsMAAACeirAKAEPIiAke1TLgfWVNyk4IlcViDHhNenSQGtu7Vd/aOZYSAQAAPA5hFQCGkBETPOIGS6Zpal/5wJ2A+6RzfA0AAEC/CKsAMISM6CDVtXapoXX4x9cU17Wpqb17yLDK8TUAAAD9I6wCwBCOdQQeQaAcTnMlSUqN6gurzKwCAAAcj7AKAEOY1HvW6kgaIeWVN8kwpJyE/s9Y7RPga1XiKBs4AQAAeDLCKgAMITUqSIYxsrNW95U1Kj0qSMH+PkNemx4dpKPMrAIAAJyAsAoAQ+g5viZwRLOf+8qGbq7UJz0qmAZLAAAAJyGsAsAwZMQEDTtQtnR060ht6/DDakyQqps71NLRPZYSAQAAPAphFQCGISM6eNh7VvPKm2SaQzdX6pMe1bMnliZLAAAAHyOsAsAwTIoJVkNbl+paOoe89uNOwIM3V+qTzvE1AAAApyCsAsAwjOT4mtyieoUH+io5InBYzz4WVmuZWQUAAOhDWAWAYcgY5vE1pmnqg4NVOn1qtAzDGNazQwN8FR3sx8wqAADAcQirADAMqVGBshgassnS/oomVTR26MysuBE9Pz06iD2rAAAAxyGsAsAw+PtYlRQROOTM6ur9VZKklVmxI3p+enQwYRUAAOA4hFUAGKZJMcFDnrW6Zn+VchJClRAeMKJnp0cHqbShTR3dtrGUCAAA4DEIqwAwTBnRwTpc3SLTNPt9v7mjW1uO1OqM7JHNqko9YdU0paLatrGWCQAA4BEIqwAwTBkxwWpq71btAMfXbMivVpfNHPF+ValnGbDE8TUAAAB9CKsAMEwZvUfMDNRkafWBKgX7WbUgPXIUz+4Lq+xbBQAAkAirADBsgx1fY5qm1uyv0ulTY+TnM/K/WiODfBXq78PMKgAAQC/CKgAMU2pkUO/xNacGykNVzSqpbxvVflVJMgxD6TFBOlLLzCoAAIBEWAWAYfPzsSglMkiH+5lZ7Tuy5owRHllzvPQojq8BAADoQ1gFgBHIGOD4mjUHqjQ1LkQpkUGjfnZ6dJCKalvVbbOPpUQAAACPQFgFgBHIiA7SkerWE46vae3s1ocFtTpzDLOqPc8OVrfdVFEdx9cAAAAQVgFgBDKig9XU0a2a446v+bCgVp02+6j3q/ZZmNHTRfjtveVjeg4AAIAnIKwCwAhM6qcj8Or9lQr0tWpRRtSYnj05NkRzUiP0/LaSMT0HAADAExBWAWAE+o6vOb7J0poDVVo2JVoBvtYxP/+qecnKK2/SvrLGMT8LAABgIiOsAsAIpEQGymoxjjVZKqxuUWFN65i6AB/v0jlJ8rEYemE7s6sAAMC7EVYBYAR8rRalRAaqsLrniJk1B3qOrDlzjPtV+0QF++nM7Fi9uKNENrs59A0AAADjyDCMVYZh7DcMI98wjHv6eT/dMIx3DcPYaRjGasMwUo5771OGYRzs/fjUUGMRVgFghDKiPz6+ZvX+SmVEByk9Othhz79yXooqGju08VCNw54JAAAwVoZhWCU9IOlCSdMl3WgYxvSTLvutpEdN05wt6V5Jv+i9N0rSDyUtkbRY0g8Nw4gcbDzCKgCM0KSYYBVWt6i9y6aNBTU6MzvOoc8/Z1qcQgN89Pz2Yoc+FwAAYIwWS8o3TbPANM1OSU9Kuvyka6ZLeq/3/98/7v0LJL1tmmataZp1kt6WtGqwwQirADBCGdFBaum06bVdZWrvsjtsv2qfAF+rLp6VqDd2l6u1s9uhzwYAABiCj2EYW477uPW495IlFR334+Le146XK+mq3v+/UlKoYRjRw7z3BIRVABihvo7AD28olJ+PRUsnRzt8jCvnJau106a39lQ4/NkAAACD6DZNc+FxH38f4f3flHSGYRjbJZ0hqUSSbTSFEFYBYIQyeven7ixu0JJJUQr0G/uRNSdblBGl5IhAPU9XYAAA4D5KJKUe9+OU3teOMU2z1DTNq0zTnCfpu72v1Q/n3pMRVgFghFIiA+VjMSTJ4ftV+1gshq6cl6x1B6tU2djulDEAAABG6CNJmYZhTDIMw0/SDZJeOv4CwzBiDMPoy5nflvRQ7/+/Kel8wzAiexsrnd/72oAIqwAwQj5Wi1KjgiTJ4ftVj3fFvGTZTeml3FKnjQEAADBcpml2S/qyekLmPklPm6a5xzCMew3DuKz3sjMl7TcM44CkeEk/6723VtJP1BN4P5J0b+9rAzJMc/jn+AUHB5stLS0j+xkBgAe69dEt2l/RpNXfPFOGYThtnMv+vE7dNlOv3bHCaWMAAAD0MQyj1TRNx53JNwbMrALAKPz0ipl67LNLnBpUpZ5GS3vLGrW/vMmp4wAAALgbwioAjEJcWIDSooOcPs6lc5JktRicuQoAALwOYRUA3FhMiL/OyIrVi9tLZbMPf9sGAADAREdYBQA3d+W8ZJU3tmtTQY2rSwEAABg3hFUAcHPnTY9XqL+Pnt/GmasAAMB7EFYBwM0F+Fp14awEvbG7TG2dNleXAwAAMC4IqwAwAVw1P0UtnTa9sJ3ZVQAA4B0IqwAwASyZFKW5qRF64P18dXQzuwoAADwfYRUAJgDDMPT187JUUt+mp7dwjA0AAPB8hFUAmCBWZMZoYXqkHngvX+1dzK4CAADPRlgFgAmib3a1vLFdT2w+6upyAAAAnIqwCgATyLIp0VoyKUp/WX2IzsAAAMCjEVYBYALpm12taurQ4x8ecXU5AAAATkNYBYAJZsnkaC2fGqO/rj6k1s5uV5cDAADgFIRVAJiA7jwvUzUtnXp0I7OrAADAMxFWAWACWpAepTOyYvW3NYfU3MHsKgAA8DyEVQCYoL5+XpbqWrv08PrDri4FAADA4QirADBBzUmN0LnT4vT3DwrU2N7l6nIAAAAcirAKABPY187NUmN7tx5ax+wqAADwLIRVAJjAZiaH64IZ8frX2sNqaGV2FQAAeA7CKgBMcHeel6Xmzm7d/95BV5cCAADgMIRVAJjgchLCdMOiVP17Q6EOVDS5uhwAAACHIKwCgAe464IchQb46Acv7pZpmq4uBwAAYMwIqwDgAaKC/fTN87O1qaBWL+8sc3U5AAAAY0ZYBQAPcePiNM1MDtPPXt2r5o5uV5cDAAAwJoRVAPAQVouhn1w+UxWNHfrTuzRbAgAAExthFQA8yLy0SF2/MFUPrTusgzRbAgAAExhhFQA8zN2rshXkZ9UPX9pDsyUAADBhEVYBwMNEh/jrrguyteFQjV7dRbMlAAAwMRkj+a57cHCw2dLS4sRyAACOYLObuuzP61TT3Kl3v3GGgv19Tni/rqVTb+wp12u7ytTeZVNGdLAyYoKVER2s9OggZcQEK+SkewAAgOczDKPVNM1gV9chEVYBwGNtPVKnq/+6QbedMUX3XJij5o5uvb23XC/nlumDA1XqtpuaHBOsmBB/Fda0qLKp44T7Y0L8dcvSNH3t3CwX/QwAAMB4I6wCAMbFXc/k6oXtJTpnWpxW769SR7ddSeEBunROki6dk6QZSWEyDEOS1NLRrSM1rTpS06LDNS16cXupmju6tf6es138swAAAOPFncIqa7wAwIN968IcvZtXqa1H6nT9olRdNidJ89MiZbEYp1wb7O+j6Ulhmp4UJkkyTek3b+5XU3uXQgN8x7t0AADg5QirAODBYkL8te5bZ8nPapGPdWQ99bLjQyVJByqatSA90hnlAQAADIhuwADg4YL8fEYcVCUpO6EvrHJeKwAAGH+EVQBAv5IjAhXsZ9X+csIqAAAYf4RVAEC/LBZDmfGhzKwCAACXIKwCAAaUHR/KzCoAAHAJwioAYEBZCaGqaelUdXPH0BcDAAA4EGEVADCgYx2BmV0FAADjjLAKABhQVkKIJGk/+1YBAMA4I6wCAAYUG+KvyCBfmiwBAIBxR1gFAAzIMAxl0WQJAAC4AGEVADCo7IRQHaholmmari4FAAB4EcIqAGBQWfGhau7oVmlDu6tLAQAAXoSwCgAYVHYCHYEBAMD4I6wCAAaVFdcTVukIDAAAxhNhFQAwqPAgXyWEBTCzCgAAxhVhFQAwpKyEUGZWAQDAuCKsAgCGlB0fooOVzbLZ6QgMAADGB2EVADCk7IQwdXbbdaSmxdWlAAAAL0FYBQAMKTu+tyMwS4EBAMA4IawCAIY0NS5EhiHtL292dSkAAMBLEFYBAEMK9LMqPSqImVUAADBuCKsAgGHJiqcjMAAAGD+EVQDAsGQnhOpwdYs6um2uLgUAAHgBwioAYFiy4kNls5s6VElHYAAA4HyEVQDAsGQn0BEYAACMH8IqAGBYMqKD5Ws12LcKAADGBWEVADAsfj4WTY4J0YFywioAAHA+wioAYNiyEugIDAAAxgdhFQAwbNnxISqua1NzR7erSwEAAB6OsAoAGLas+J4mSweZXQUAAE5GWAUADBsdgQEAwHghrAIAhi01MkgBvhbtL292dSkAAMDDEVYBAMNmsRjKig9lZhUAADgdYRUAMCLZ8XQEBgAAzkdYBQCMSHZCqKqaOlTb0unqUgAAgAcjrAIARqSvIzBLgQEAgDMRVgEAI0JHYAAAMB4IqwCAEYkL9Vd4oK/2lxNWAQCA8xBWAQAjYhiGsukIDAAAnIywCgAYseyEUO0ra5Ldbrq6FAAA4KEIqwCAEZuTGqHmjm4dqmp2dSkAAMBDEVYBACM2NzVckrSjqN61hQAAAI9FWAUAjNjkmBCF+vsQVgEAgNMQVgEAI2axGJqdGq7c4npXlwIAADwUYRUAMCpzUyOUV9ak9i6bq0sBAAAeiLAKABiVOSkR6rab2lPa4OpSAACAByKsAgBGZW5qhCRp+9F6l9aBwRVUNauyqd3VZQAAMGKEVQDAqMSFBSgpPEC5xcysuqP2Lpt+8do+nfv7Nfry49tdXQ4AACPm4+oCAAAT15zUCO0oqnN1GTjJ1iO1uuuZnSqoblFmXIg2F9aqqLZVqVFBri4NAIBhY2YVADBqc1MjVFTbpprmDleXAkmtnd368ct7dM2DG9XRbdd/PrdED316kSTppdxSF1cHAMDIEFYBAKM2p3ffKkfYuN7GQzVadd9a/Xt9oT6xNF1v3rlSyzNjlBoVpEUZkXphe4lM03R1mQAADBthFQAwarOSw2UxpB1F7Ft1pV+9kacb/7FJhiE9eetS3Xv5TIX4f7zT5/K5ycqvbNae0kYXVjmxNLV3aXcJn9cA4EqEVQDAqAX7+ygrPlQ7iupdXYrXKqlv019XH9Llc5P0xh0rtXRy9CnXXDwrUb5WQ//bXuKCCiemf3xQoMsfWK/iulZXlwIAXouwCgAYk7mpEcotqmeJqYu8trNMknTnuVkK9LP2e01ksJ/OyIrTS7mlstn5fRqOXSUNstlNPf7hUVeXAgBuxTCMVYZh7DcMI98wjHv6eT/NMIz3DcPYbhjGTsMwLup9PcMwjDbDMHb0fjw41FiEVQDAmMxJjVBDW5eO1DAD5Qqv7CzVzOQwZcQED3rdlfOSVdnUoU0FNeNU2cSWV94kSXrqoyK1d9lcXA0AuAfDMKySHpB0oaTpkm40DGP6SZd9T9LTpmnOk3SDpL8c994h0zTn9n7cNtR4hFUAwJjM7W2yxFLg8Xe0plW5xQ26ZHbSkNeeMy1OIf4+eoGlwEOqb+1UWUO7VmbFqralU6/2zl4DALRYUr5pmgWmaXZKelLS5SddY0oK6/3/cEmjbkdPWAUAjElmXIgCfa2EVRd4ZVfPv/8Xz0oc8toAX6sunJmgN3aXM1M4hL5Z1c+enqEpscF6dNMRF1cEAG4jWVLRcT8u7n3teD+SdIthGMWSXpP0lePem9S7PHiNYRgrhhqMsAoAGBMfq0WzUsIJqy7w6s4yzU2NUGpU0LCuv2Jespo7uvXOvgonVzax5ZX1dE2enhimTy7LUG5RvXL5/AbgPXwMw9hy3MetI7z/RkkPm6aZIukiSY8ZhmGRVCYprXd58Ncl/dcwjLBBnkNYBQCM3dzUCO0tbVRnt93VpXiNw9Ut2lPaqEtmDz2r2mfp5GjFh/nrf9tHvSLLK+SVNykq2E+xof66an6ygv2senQjs6sAvEa3aZoLj/v4+3HvlUhKPe7HKb2vHe9zkp6WJNM0N0oKkBRjmmaHaZo1va9vlXRIUtZghRBWAQBjNiclQp02u/aVcY7neHkltydwXjSMJcB9rBZDl81J0ur9lapr6XRWaQ5ns5u65q8b9Js388al6/S+8iblJITKMAyFBvjqqvkpenlnqWon0K8ZADjJR5IyDcOYZBiGn3oaKL100jVHJZ0jSYZhTFNPWK0yDCO2t0GTDMOYLClTUsFggxFWAQBjNjctQpKUW1zv0jq8ySs7y7QwPVJJEYEjuu+Kecnqtpt6ddfEaRq0q6RBW47U6YH3D+n+9/KdOpbNbupAeZNyEj5emfaJZenq7LbrqY+KBrkTADyfaZrdkr4s6U1J+9TT9XePYRj3GoZxWe9l35D0BcMwciU9IenTZs93GldK2mkYxg5Jz0q6zTTN2sHGI6wCAMYsKTxAMSH+2nG03tWleIWDFU3aX9E0oiXAfaYnhikzLkQv7pg4XYFX76+UxZAunJmg3799QA+vP+y0sY7Wtqqty6acxNBjr2XFh2rZ5Gj9Z9MRzqkF4PVM03zNNM0s0zSnmKb5s97XfmCa5ku9/7/XNM3TTdOc03tEzVu9rz9nmuaM3tfmm6b58lBjEVYBAGNmGIbmpkZoBzOr4+KVnWUyDOnCESwB7mMYhq6Yl6yPCutUVDsxzsZdc6BKc1IjdP+N83Te9Hj96OW9en5bsVPG6lvKPi3hxJ4fn1yWrpL6Nr2XV+mUcQEApyKsAgAcYm5quAqqWtTQ2uXqUjyaaZp6ZWepFmdEKT4sYFTPuHxuz7msL+W6f6OlupZO5RbV64ysWPlYLbr/xnk6bUq07np2p97aU+7w8fLKGmUxpMz4kBNeP296vBLDA/ToxkKHjwkA6B9hFQDgEHNTIyVJO0vqXVuIh9tf0aRDVS26ZE7SqJ+REhmkxRlRemF7ybg0LBqLtfnVspvSGVmxknrOi/37JxdqZnK4vvzEdm04VO3Q8faVN2lybIgCfK0nvO5jteimxWlae7Bah6qaHTomAKB/hFUAgEPMSgmXJPatOtkruWXH9m+OxeXzkpRf2aw9pf13cG7t7FZ7l21MYzjCmv1Vigzy1eyUiGOvhfj76OFPL1JGdJC+8MgWh56BmlfeqJyE0H7fu2Fxmnythh7jGBsAGBc+ri4AAOAZwgN9NSU2mI7ATtS3BHjZlGjFhPiP6VkXz0rUj17ao1+9kaechFBVNHaosqldlU0dqmrsUFNHt1IiA7XmrrNktRgO+hmMjN1uas2BKq3IjD2lhshgPz32uSW65sEN+tS/N+uZLy5TZnz/IXO4mtq7VFTbphsWpfX7fmyovy6alajnthbrrguyFezPl1EA4EzMrAIAHGZOaoR2FNW7/dLSiWpPaaMKa1p1yezRLwHuExHkp1UzE7X2YLUe23REO4rq1W0zNS0hTFcvSNG1C1JUXNemjwoHPVXAqfaWNaq6uePYEuCTxYcF6PHPLZWPxaK7n9s55s+7AxVNkjTgzKokfXJZhpo6uvXC9onTTRkAJiq+JQgAcJh5qRF6fluJSurblBIZ5OpyPM4rO8vkYzG0asbYlgD3ue/6ufrZlTMV6u8jwzhx5rKlo1sv7yzV67vKtHRytEPGG6k1B6okSSsHCKuSlBYdpDvOzdT3/7dbGwtqdNqUmFGPt6+sN6wmhg14zfy0CM1ICtNjG4/o5iVpp/y6AZj4Khrb9cGBKl06J+mU/esYX8ysAgAcZk5qhCRphwP3EKJH3xLg06fGKDLYzyHPtFoMhQX49hu4gv19dGZWnF7fXS67i84WXXOgSjOTwxQbOviS52sXpCgmxF9/ef/QmMbLK29UaICPksIH7rJsGIZuWpKm/RVNOlhJoyXAU9jtptYdrNZtj23Vab98T3c9u1P3vXPQ1WV5PcIqAMBhchLC5OdjcWjDG/TILW5QcV2bLp498rNVR+vCWQmqbOrQ1qN14zZmn8b2Lm09UjfgEuDjBfha9YUVk7Quv3pM3yjJK2vStISwIWdLl0yKkiTtLG4Y9VgA3EN9a6f+ubZA5/x+jW7514f68HCNPrd8klbNSNBD6w5PmPOoPRVhFQDgMH4+Fs1ICmNm1QleyS2Vr9XQBdMdswR4OM6ZFi8/H4te21U2bmP22ZBfLZvd1JnZccO6/ual6QoP9NVf3s8f1XimaSqvvEk5iUM3aZoUE6JgP6t20kwMmLDqWzt11zO5WvLzd/XTV/cpMshXv79ujjZ++xx956Jp+tFlM2S1GPrl63muLtWrEVYBAA41NzVCO4sbjjWrwdjZ7aZe21WmlZmxCg/yHbdxQ/x9dEZWrF7fNf5LgdccqFJogI/m9S4tH0qIv48+fVqG3tpbof3lI//cK65rU3NHt3ISBt6v2sdqMTQzOVy5zKwCE5LNbuorT2zX/3aU6OoFKXrtqyv0/P+drqvmpxzbo5oQHqAvnjFZr+4qc2mjOW9HWAUAONSnlmUoLNBXN/x9k/YOcIYnRia3uF6lDe26aNb4LQHuc9GsBJU3tmv7OM6Wm6ap1furtHxqjHysw/9S5dOnZSjIz6q/rh757GpeeV9zpeEdfzMnNUL7yhrV2W0f8VgAXOtP7x7U2oPVuvfymfr5lbM0Pan/b1LdunKyEsIC9JNX9rps7763I6wCABwqIyZYT926VH5Wi2765ybtLmH2aaze2FMuH4uhc6fFj/vY50yLl5/VotfHcSnwwcpmlTW068zsoferHi8y2E83L0nTS7mlOlozsn1meWU931jJHuZZrbOSw9XZbWcFATDBvL+/Un9676CuWZCiGxalDnptkJ+P7l6VrZ3FDXoxl+OqXIGwCgBwuMmxIXr6i8sU7OejG/+xSdtd0KDHU5imqTd3l2vZlOhxXQLcJyzAVysyY/T67vJxOz93zf6hj6wZyOdXTJaPxaIHPxhZZ+C88ialRwcp2H94p/rNSYmQ1DPrDWBiKKpt1Z1P7VBOQph+cvnMYR09dcXcZM1OCdev39ivtk7bOFSJ4xFWAQBOkRYdpKe+uFSRQX76xL82s+dnlA5UNKuwplWrZo5fY6WTXTgrUSX1beO2R3P1gUplx4cqMTxwxPfGhwXomoUpenZLsSoa24d9377yRuUkDG9WVZJSowIVGeSrnUWsHAAmgvYum/7v8W2y2U399eb5CvQb3vmpFouh7108XWUN7fr7BwVOrhInI6wCAJwmJTJIT39xmeJC/fWphzZr46EaV5c04byxu1yGIZ03ffyXAPc5b1q8fK3GuCwFbuno1keH60a8BPh4t62cIptp6h/D/MKyrdOmwuqWYTVX6mMYhmalRGgny9yBCeHeV/ZqV0mDfnftHGXEBI/o3sWTonTRrAQ9uOaQyhuG/00wjB1hFQDgVAnhAXryi0uVHBGozzy8WWsPVrm6pAnljT3lWpAWqbjQAJfVEB7kq9Onxui13WVOXwq8qaBGnTb7sM5XHUhadJAum5Okxz88qrqWziGvP1jZJLspTRtmc6U+s5PDdaCiiaWBgJt7dmux/vvhUX3pzCk6f8boVqncs2qabHZTv31rv4Orw2AIqwAAp4sLDdCTty5VRnSwPvnQZp37+zX6+tM79OjGQu0oqldHN1/s9+doTav2lTW6dAlwn4tmJqqotk27S5zb4Xn1/ioF+Vm1ICNyTM/50plT1NZl0783FA55bV5ZbyfgEcysStLslHDZ7Kb2ljG7CrirvaWN+u4Lu7RscrS+cV7WqJ+TFh2kzyzP0HPbimkcOI4IqwCAcREd4q8nb12qb5yXpYzoIH1woFo/eHGPrnhgvWb+8E1d9ud1+ukre9Xa2e3qUt3Gm3vKJUkXjHImwJHOmx4vq8XQa7udtxTYNE2tPlCp06ZEy99nePvJBpIVH6rzp8fr4fWH1dwx+OfU3rJGBfpalRYVNKIx5vSeAbuT81YBt9TY3qX/e3yrIoJ89acb543oKKz+3H7WVEUF+eneV/aOW8M5bze8lncAADhARJCfvnx2pqSeYFLW0K7conrtKK5XblG9/rnusEIDfHXHuZkurtQ9vLGnXDOSwpQ6whDlDJHBfjptSrRe31Wmuy/IHlYXzZEqrGlVUW2bbl05xSHPu/2sqXprb4X+s+mIbjtj4GfmlTcqOyFUFsvIfk7xYQGKC/UnrAJu6snNR1VY06pnb1um2FD/MT8vLMBXd56Xpe/9b7c+98gWLZ8ao6WTo5Uzir8/MDyEVQCASxiGoaSIQCVFBOrCWYmSpC88ukX/Wlegzy7PUGjA+B/T4k4qG9u19UjdmJatOdpFsxL17ed3aW9Zo2YkhTv8+av3V0qSzsgc/X7V481JjdAZWbG6/92DWjUjod+mKqZpKq+8SReOcqn17JQIjq8B3NSOonqlRQVpYUaUw555w6JUHa5u0dt7K/ReXs/fWeGBvlo8KUpLJ0dr6eQoTU8Mc8o39LwRy4ABAG7jq2dnqrG9W49uPOLqUlzuzb0VkqQL3GC/ap/zp8fLYkiv7yp3yvPXHKjS5JhgpUU7bib5F1fNko/Voi8/sa3fvdEVjR2qb+0a8X7VPnNSwlVQ1aLG9q6xlgrAwXKLGjQrxbHfWPOxWvT9S6brg7vP0oZ7ztYfrp+jVTMSdKCiST95Za8u/tM6febhj9TE3wkOQVgFALiNWSnhOjsnTv9YWzDkPkNP99aeck2OCVZmXIirSzkmOsRfSydH67Vdg3cF7rLZR/zsjYdqtKmgRmeM4cia/iRFBOo318zW7pJG/fqNU7t47ivvaRg1LXF0YbXvC2EargDupaa5QyX1bZrj4LB6vKSIQF05L0W/uma21tx1ljZ++2x956IcrT1YrWsf3KjS+janje0tCKsAALfylbOnqr61S//Z5L2zq/Wtndp4qEYXzExwu6VkF81KVEF1i/ZXNJ3welVTh/617rAuuX+tsr/3um5/fJtyi+qHfF5+ZbM+/8gW3fiPTYoO9tfNS9IcXvP5MxL06dMy9K91h/XuvooT3uvrBJydMLJja/rMTomQRJMlwN30nYHc92d0PCSGB+rWlVP08GcWqaSuTVc8sJ5vZI0RYRUA4FbmpUVqZVas/vFBgdd2Bn53X6W67aZWuUEX4JNdMCNBhiG9tqtc7V02vZRbqs/8e7OW/uJd/eSVvTJk6MbFafrgYJUuf2C9bvj7Rr2fV3nKTGxNc4d+8OJuXXDfB/qwoEbfWpWjd79xhqbGjS40DuWeC3M0PTFM33wmV2UNH8925JU3KjkiUOGBo9sjHRXsp9SoQO1k3yrgVnYVN8gwpJnJzptZHciKzFg9+6XT5Gu16NoHN+qdvRVD34R+EVYBAG7njnOmqqalU49vOurqUlzijT3lSgwP0GwnLl8brdhQfy3OiNIjGwq16Kfv6KtPbNf+8ibdunKy3r5zpV7+ynL97MpZ2nDP2frexdN0pKZVn3n4I626b62e21qs5o5u/XX1IZ35m9V6/MOjunlJmlbfdaa+dOYUBfiO7biawQT4WnX/TfPU0W3XHU/ukM3eE57zypqUM8pZ1T6zkyOYWQWGYfPhWhXXtY7LWDuL6zUlNkQh/q7pJ5udEKoXbj9NmfEh+sJjW/Tv9YddUsdER1gFALidBelROn1qtP72QYHaOk9tiuPJWju79cGBqt4ZTPdaAtznpiVpshg9zZ/++4UlWvets/WtVTnKjP849IUG+OrzKyZrzV1n6ffXzZEkfeOZXM358Vv61Rt5WjI5Wm9+baXuvXymokPGfqTEcEyJDdFPLp+pzYdrdf97B9XRbdOhqmblJI4xrKaEq7iuTTXNHQ6qFPA8Nrupzz78kT750Gan/71umqZyixs02wWzqseLCw3QU7cu0/nT4/Xjl/fqhy/uVvco9vR7M46uAQC4pTvOydJ1f9uoJzYf1WeXT3J1OeNmzf4qdXTbdYEbLgHuc/ncZF0+N3lY1/r5WHTV/BRdOS9Zaw5U6e29Fbp4dqJOmxLj5Cr7d/WCFK3Pr9af3j2o8EBfddvNUXcC7nNs32pJg87KjnNAlYDnKahqVnNHt5qruvWL1/fp3stnOm2sisYOVTV1uMXqlEA/q/5y8wL98vV9+sfaw6pp6dSfb5rv6rImDMIqAMAt9ZxZF6UH1xzSTUvSnLpE1J28sadcUcF+WpQR6epSHMowDJ2ZHacz3SDM/eSKmdpeVK97X9krSZo2xpnVmclhMgxpZxFhFRjIrt5GQ2dlx+rRjUd0do7z/j7oO/t41jg2VxqM1WLouxdPV3p0sBLDA1xdzoTCMmAAgNv66jmZqmzq0NNbilxdyrjo6LbpvX2VOm9avHys/BPtLMH+Prr/xnnytVjk52NRRnTwmJ4XGuCryTHB2lVS75gCAQ+0q6RBgb5WPXDzfGXFh+iuZ3eqtqXTOWMVN8jHYmhG0thWTTjaLUvTdc60eFeXMaHwLyEAwG0tmxytRRmR+uvqQ+ro9oy9q4OdQbrhUI2aOrq1aqb7LgH2FDOTw/Xb6+bo9jOnOuQbA3NSIpRb3DDo+bOAN9tV3KAZSWEK8vPRfdfPU31rp77z/C6n/JnJLa5XVnyo16zI8WSEVQCA2zIMQ189J1NlDe16dmuxq8sZs3+uLdC077+hlb9+X3c9k6tnthSpqLb12Bdrb+4uV4i/j06bGu3iSr3DZXOSdMe5mQ551uyUcFU1dai8sd0hz/M2pmnqnud26vVdZa4uxS2V1rdpU0GN6pw0E+lsNrupPaWNx46RmZ4Upm+cn6039pQ7/O920zS1q6TBLfarYuzYswoAcGvLp8ZoXlqE/vL+IV27IFV+PhPz+6z/XFugn766TysyYxToa9Xb+yr0TO8XaUnhAVo8KUprDlTprJw4+fswGzDR9O2Nyy1qUGJ4oGuLmYC2Ha3Tkx8Vae3Bap07PV6+LIM/wdef3qFNBbWSpISwAGUnhConMVTTEsKUkxiqKbEhbv1rVlDVrLYum2Yd1533Cysm6728Sv345b1aOjlaqVFBDhmrqLZN9a1dxxqfYWIjrAIA3Frf7Opn/v2RVv76fZ2VE6uzsuN0+tQYBbvo/LyR6guqF89K1H03zJWv1SK73dTBymZ9eLhGHx6u1br8GtW1dunyOUmuLhejMCMpTD4WQ7tK6lnGPQqPbzoqiyGV1LfpxR2lumZBiqtLchumaWpfWZPOyo7VsinRyitr0r7yJm08VKPO3m0FM5LC9L/bT3fbwNp3DvHxs51Wi6HfXzdHF963Vnc+tUNPfXGZrJaxH9fV11yJmVXPMDH+lQcAeLUzs2L155vm6ZXcMr2cW6YnNhfJz2rRkslROjsnTmfnxCktKsgtzyXtL6hKksViKDshVNkJofrksgyZpqnals5xO3MUjhXga1VWfOixL8oxfPWtnXplV5luXJymbUfr9eCaQ7pqXrIsDggunqCquUMNbV06IytWnz7942O8umx2Ha5u0ft5lfrF63n674dH9anTMlxX6CB2lTQoyM+qybEhJ7yeEhmkH18+Q19/Old/++CQ/u/MqQ4Zy8/HouyEsXX5hnsgrAIA3J5hGLpkdpIumZ2kzm67thTW6r28Sr23v2cJ2Y9f3qsQfx+lRAb2fgSd8P/TEsMc8h37kRooqPbHMAyC6gQ3OyVcr+8ul2mabvmNE3f13LYSdXbbdfOSdC2ZHK2vPrFdb+2tYIa6V35lsyRpatyJ4cvXalFWfKgy40K0en+V/vjuQV05P1lhAb6uKHNQu0saNH2Av4evnJesd/dV6g9vH9DKzNhj+1pHK7eoXtMTw9x2lhkjw+8iAGBC8fOx6LSpMfreJdP13jfO1Jq7ztRPLp+haxakKCUySMV1bXp2a7F++uo+3fafbbrk/nX65jO5417nSIIqPMPslAg1tHXpaG2rq0uZMEzT1OMfHtG8tAhNTwrTRTMTlB4dpL+uzqezcq9DvWE1Mz6k3/cNw9B3Lpqm2pZOPbj60HiWNix9zZVmDbAs1zAM/fSKmYoK9tMXHt2igqrmMY21m+ZKHoWZVQDAhJYeHaxPLDvxnEzTNNXY1q2iulY99VGRHtt0RDctSdOijKhxqYmg6p36vkDOLW5Q+hjPbvUWHx6uVUFVi3577RxJko/Voi+unKLvvLBLGw7V6PSpMS6u0PUOVjYr1N9HcaEDr7yYlRKuK+Ym6V/rDuuWpelKinCfJl+H+mmudLLIYD/9+9OL9Yl/fajr/rZJ//n8YuUkjPyM1MPVzWrptNFcyYPwrycAwOMYhqHwIF/NTA7Xdy6apsTwAN378l7Z7c6ZqbHbTe0qbtCf3zuoa/66gaDqpbITQuXnY9HOonpXlzJhPP7hUYUF+OiS2YnHXrt6QbLiQv31wPv5LqzMfeRXNmtKXMiQS8u/cX62TFP63VsHxqmy4dnVu497sLAq9Rxn09NkSbrh75u0s7dR0kjkFp3ayAkTG/+CAgA8WqCfVd9alaNdJQ16YXuJw55b3dyhF7YX62tPbtein72jS/+8Tr9964A6uu36xnlZBFUv5Gu1aHpiGE2WhqmmuUNv7C7T1QtSFOD78XFN/j5WfX7FJG04VKMdBH/lVzYrM67/JcDHS40K0qdPz9Dz24u1t7RxHCobnoGaK/VnalyInvniaQrx99FN//hQHxXWjmqsKcMYCxMD/4oCADzeZXOSNCc1Qr9+M08tHd1jft4/1xZo0c/e0Z1P5eqDg9VakRmjP1w/R1u+d65e/spyfeWcTIKql5qTEq7dpQ2yOWkW35M8u7VYXTZTNy9JO+W9m5akKzzQV3/x8tnVhrYuVTZ1aOowwqok3X7mVIUF+OoXr+9zcmXDt6ukQTOSht/kLi06SM/ctkxxof765L82a93B6mGPlVtcr5lJ4S5pqAfn4F9SAIDHs1gM/eCS6apo7NDf1oytAcnBiib96o08nZEVq5e+fLq2fPdc3XfDPF05L0UxdPP1erNSItTaadOhMTSJ8QZ2u6n/bj6qxRlRp3S5laQQfx996rQMvbW3QgcrmlxQoXv4uBPw8MJqeJCvvnL2VK09WK01B6qcWdqwdNvs2lvaOOIOv4nhgXrqi8uUHh2kzz7ykd7ZWzHkPV29Y7EE2LMQVgEAXmFBeqQum5Okv31QoJL6tlE9w2439a3ndirY30e/vXaOZqdEcBYkTjAvLUKStO1InWsLcXMbDtXoSE2rbl566qxqn8+clqFAX6v+OsZvME1k+ZU9QT2zn0A/kE8sS1dqVKB+8do+l8/wH6pqUVuXbVQBMjbUX0/eulTTEkJ123+26tWdZYNef6CiSR3dds1OjRhltXBHhFUAgNf41oU5kqRfvZ43qvsf23RE247W6weXTGcWFf2aHBOsqGA/fVRIWB3M4x8eUWSQ76BnqUYG++nGxWl6aUepiuu88zig/Mpm+ftYlBw5/O6+/j5W3X1BjvLKm/T8tmInVje0XSXDa640kIggP/3n80s0NzVCX396hw5Xtwx4bd9e8dljPKcV7oWwCgDwGskRgfriysl6KbdUW4+MrHFHSX2bfv1GnlZmxerKeclOqhATnWEYmp8WOeLPL29S2dSut/dW6NqFqfL3sQ567RdWTpJhSP/4oGCcqnMv+ZXNmhwbMuI9mJfMTtSc1Aj97q0Dauu0nfBee5dNO4rq9djGQt3/7kF1dtsdWfIJdvc2PJoUM/qGR6EBvnrg5vny97HoW8/uHLCr+87iBoUF+Cg9OmjUY8H9cM4qAMCrfPGMKXpqS5HufWWfXvjSacNaxmuapr73wi6Zkn52xcwhj5CAd1uYEal39lWoqqlDsYOcjemtntlSrG67qRsXD7wEuE9ieKCunJesJz8q0lfOyfS6FQ0HK5s1Py1yxPcZhqHvXjRN1/1to37z5n5NjQvRrpJ67Sxu0P7yJnUfF/hqWzv1w0tnOLLsY3Y6qOFRfFiAvn/JdN317E49urFQnz59Ur9jzU6J4O9nD8PMKgDAqwT7++iuC3KUW1SvF3OHd5TNS7mlen9/lb55frZSo/iuPQa3ML0nXGxl3+opbHZT//3wqE6fGq1JMcHDuueLZ0xRp82uX7+R5/I9mOOprdOmkvq2YTdXOtniSVE6b3q8Hlp/WN95YZde21WuqGA/3bpysh68Zb7W33O2PnN6hv69vlAv55Y6uPre5kplI2+uNJBrFqTozOxY/eqN/Tpac+Ky8PYum/aXN9FcyQMxswoA8DpXzUvWIxsK9avX9+uCGQkK8hv4n8Palk79+OW9mpsaoU+dljF+RWLCmpUSLj8fi7YeqR10T6Y3+uBglUrq2/Sdi6YN+54psSH63OmT9M91h3W0tlV/umGe4sICnFilezhU1SzTHH4n4P78+urZ+nB+raYlhiotKuiUWcdvXzhNO4sbdM9zOzUtMbTfzsyjdaiqRe1dds1KCXPI8wzD0M+vnKXz//CBvvXcTj3++SXHVsbsK2tUt93U7JQIh4wF98HMKgDA61gshn5w6XSVN7brey/sVlHtwM1b7n15j5rau/Srq2dzdh+Gxd/HqtnJ4drCzOopHt90VDEhfjpvevyI7vveJdP1m2tma0dRvS760zptyB/+2ZsTVd+xNZljCKuRwX5aNTNB6dHB/S6P9fOx6IGb5ivA16rb/rPNIedQ99lZXC9p9M2V+pMUEajvXjxNGwtq9N/NR48bq7e5EjOrHoewCgDwSosyovSZ0zP0wo4SrfzN+7rlnx/qpdxStXd93Izk/f2V+t+OUn3pzKnKTnDcjAM834KMSO0uaTjh88nbbSqo0Xt5FbpuYar8fEb+Jei1C1P14u3LFR7oo5v/9aH++M5Bj14WnF/ZLKvFUHr08JZLj1ZCeIDuv3GeCqqadc/zu2Sajvk13V3SoOAxNlfqzw2LUrV8aox+8dq+Y12idxY3KCbEX4nhnj/j7m0IqwAAr/XDS2do7d1n6Y5zMnW4ukVffWK7lvz8Xf3wxd3aeqRW33tht6bGhej2s6a4ulRMMAvTo9RlM5VbVO/qUgZkmuaAnVUdrai2Vf/3+DZlxATrtjNH/+cpOyFUL315ua6Ym6w/vHNAn3pos6qbOxxYqfvIr2xWRnTQqIL9SJ02NUbfvCBbL+eW6pENhQ555q6SBs1wQHOlkxmGoV9cNUumpG/3huue5krhNFfyQIRVAIBXS4kM0tfOzdLau8/Sfz63RCuzYvXE5iJd/deNKm1o06+unjXk8RrAyRb0Nllyp6XApmnqYEWTHtt0RLf/d5sW//xdrfj1+06f/W3p6NYXHt2iLptd//zkQoUF+I7pecH+Pvr9dXP0y6tm6aPCWl30x7Va74HLgg9WNo1pv+pI3bZyis6dFq+fvrpvwOZgbZ02vbG7XPe+vHfQs28d3VzpZKlRQfr2hTlae7BaD28oVH5VM0uAPRQNlgAAUM8+1uWZMVqeGaP61k69uKNUwf4+WpAe5erSMAFFBftpSmzwiDoCv7C9WFHB/lo+NcZhs1EVje16fVeZPjxcq82Ha1XT0ilJSggL0KzkcL2XV6nnthXr5iXpDhnvZHa7qW8+k6sDFU3692cWa3KsY8KXYRi6YXGa5qRG6PbHt+nmf36oc6fF654Lc8Y14DlLZ7ddR2pax7VBl8Vi6HfXzdGl96/T7Y9v06tfXa7oEH81tHbp3bwKvbmnXGsOVKm9q+dc1q1H6/TMF5f1O/ObX9Ws9i67UwPkzUvS9equMv3klb0yTfareirCKgAAJ4kI8qPzL8ZsYXqU3thTLrvdHPI83wMVTbrzqVxJUnJEoK5ZkKJrF6YoJXJ0RyWZpqn/7SjRD/63R00d3UqOCNQZ2bFaOilaSyZHKa33CKbLH1ivf649rBsWpTmlgdif3juo13eX63sXT9MZWbEOf/60xDC9+tUVemj9Yf119SFdcN8HumFRqr52btaEPuP2SE2Luu2mMh3YnXc4wgN99ddb5uuqv2zQZx/ZolB/H20qqFG33VRCWICuW5iqC2YkqLalU195Yrt+99Z+fbufzs67ehseOWtmVeoJ17+6erZW3bdWbV02OgF7KMIqAACAEyzIiNRTW4p0qKpZmfGDh47nt5XIajH0iytn6ZVdZfrTewf1p/cOavnUGF23MFXnz4gf9nL0+tZOffeF3Xp1V5kWpEfql1fNGnD8W1dO1pf/u11v761w+CzeG7vLdN87B3XV/GR9bvkkhz77eIF+Vt1+1lTdsChVf3r3oB7/8Kj+t71EXzxjij6/YtKgR1O5q75OwK6YJZ6RFK6fXjFTdz27U5NjgvX5FZO1amaCZieHn/BNl00FNfrbBwVaNiVaZ2bHnfCMXb3NlSYP8yzd0UqPDtbPrpypDw5UKSZk4n5zAgMzRtLxKzg42GxpaXFiOQAAAJ6hoKpZZ/9ujX5x1SzduDhtwOtsdlPLf/WepiWG6aFPL5IkFde16tmtxXpmS7FK6tsUEeSrS2Yn6pLZSVqcETXgTO3ag1X65jO5qmnu1J3nZem2M6YMOmPabbPrrN+tVkyIv57/0mkOa1Czr6xRV/91g7LiQ/XkrUsV4Dt++74Lqpr16zf264095YoL9dePLpuhi2Yljtv4jnD/uwf1u7cPaO+9F7gsbNe3dio80HfAz4n2Lpsu//N6VTd36PU7Vpxw9u2Vf1kvX6tFT39x2XiVCwcyDKPVNE3nfqdhmGiwBAAA4ASTYoIVHeynjwprB71uU0GNyhradeW85GOv9TX++uDus/ToZxdr+dQYPbu1WDf8fZOW/fJd/fjlPdp6pO7YMSNtnTb96KU9+sS/Nis0wFf/u/103X7W1CGX9vpYLfr88snafrTeYc2gals69YVHtyg0wEd/+8SCcQ2qkjQ5NkQPfmKBnvvSMsWE+OvOp3ZMuCOEDlY2KyUy0KWzwhFBfoN+8yLA16o/3zRPLZ3duvPpHcc6S3fb7Npb2ujQ81XhvSbeuggAAIAJwDAMLUiPHLLJ0vPbShTq76Pzpsef8p7VYmhlVqxWZsWqpaNb7+ZV6pXcUj3+4VH9e32hkiMCdeHMBL2/v1KHqlr0mdMz9K1VOSMKiNcuTNF97xzQ39YUaFHG2BqKddvs+r/Ht6qyqUPPfHGZ4sNcd+7lgvQo3b0qW5/+90fafLhWK52wZ9ZZ8iubJ0SjqMz4UP34shn61nO79Nc1h3T7WVN1sLJZHd12wiocgrAKAADgJAszIvXW3gpVNXX02/CntbNbr+8u06Wzk4YMmMH+PrpsTpIum5OkxvYuvb2nQq/sLNXDGwoVHeKnxz63WCsyRx7Igvx89IllGfrTuwfHHJIeWn9Ymwpq9btr52hOasSon+MoSyZFy89q0dqDVRMmrNrspg5VNeu0KdGuLmVYrluYqnX5Nfr92we0dHKUDlX1bBmcRXdeOABhFQAAwEn6jj7aeqRWq2aeum/yrT0Vau206ar5yae8N5iwAF9dvSBFVy9IUVN7l/x8LGM6D/hTy9L1tzWH9M+1Bfrl1bNH9Yziulb94e2DOnda3Ih/Ps4S6GfVokmRWntw4pzDWlLXpo5uuzLj3X9mVepZQfCzK2cqt6heX31ihxZmRCrE30eTot1iyyMmOPasAgAAOMnM5DD5+Vi0pbD/pcDPbStWckTgmJbfhgb4jimoSlJ0iL+uWZCi57eVqLKpfcT3m6apH720R5L0o8tmOKxRkyOsyIxVXnmTKhtH/vNyhfyqJkmu6QQ8WmEBvvrTjfNU0diuF3eUanpS2JDHNQHDQVgFAABwEn8fq+akhPfbvKiysV3r86t15bxkt/jC/vMrJqvLbtfD6wtHfO+beyr0zr5K3Xle5qjPhnWW5VNjJGnCzK4erOg9tiZ2fM9YHau5qRG6e1W2JLFfFQ5DWAUAAHCiBelR2lPaoLbOEzvSvrijVHZTutJNlsxOignWqhkJ+s+mI2ru6B72fc0d3frRS3uUkxCqz5zuvPNUR2t6Ypiig/20Ln9ihNX8ymbFhvorPMjX1aWM2OeXT9b3L5muTy5Ld3Up8BCEVQAAACdalBGpLpup3OL6E15/blux5qRGaEqs+yz3vHXlZDW2d+upj4qGfc/v3zqgiqZ2/fyqWfK1ut+XlhaLoeWZMVp7sPrY8SruLL+qWVPd6HNiJCwWQ59bPknp7FeFg7jf3ygAAAAeZEF6pCSdcITN3tJG5ZU36Wo3mVXtMy8tUoszovTQusPqstmHvH53SYMe3nBYNy9J0/y0yHGocHRWZMaqurlDeeVNri5lUKZpKr9iYhxbA4wHwioAAIATRQT5aWpciLYU1h577YXtxfKxGLpkdpILK+vfrSsnq6S+Ta/tKhv0Opvd1Hde2KXoEH/ddUHOOFU3Oisy+/atVrm4ksFVNnWoqaN7wnQCBpyNsAoAAOBkC9MjtfVInex2Uza7qRd3lOrM7DhFBfu5urRTnJ0Tp6lxIfrL+4dUWN0y4HX/2XREO4sb9P1Lpis80L33V8aHBSg7PtTtmyzlV/Y1VyKsAhJhFQAAwOkWpEeqsb1b+VXNWp9frcqmDrdbAtzHYjH09fOydKCySWf+drUuf2C9/rXu8AlHv5Q3tOs3b+7XiswYXTr71PNj3dGKzBhtLqw9pdGVOzlYMfGOrQGcibAKAADgZH3nqG4prNPz24oVFuCjs6fFubiqgV00K1Hrv3W2vnNRjrptdv3klb1a+ot3ddM/Numpj47qBy/uVpfNrp9eMdOtzlQdzPLMGHV227X5uOXY7ia/qllhAT6KDfV3dSmAW/BxdQEAAACeLj06SDEhflpzoFIfHKjWlfOT5e9jdXVZg0qKCNStK6fo1pVTlF/ZrJdyS/Vybqm+9dwuSdI3z8+aUF1fl0yKlp/VorUHqnRGVqyry+lXfmVPc6WJ8g0AwNkIqwAAAE5mGIYWpEfqzT0VkqSr5rnnEuCBTI0L0dfPy9Kd52ZqV0mDdhY36LqFqa4ua0QC/axaNCnSrc9bza9s1jk58a4uA3AbLAMGAAAYBwvTe5YCp0UFHTvOZqIxDEOzUyJ0y9J0+flMvC8jV2TGKq+86YT9t+6irqVT1c2d7FcFjjPx/pYBAACYgBZm9ATUK+cls8zTRT4+wsb9Zlfzq3o7ARNWgWMIqwAAAONgbmqEfnPNbH1+xSRXl+K1piWEKSbEzy3PWz12bA1hFTiGPasAAADjwDAMXTvB9nl6GovF0PKpMVqXXy273ZTF4j4z3PmVzQr0tSo5ItDVpQBug5lVAAAAeI3lmbGqbu7UvvJGV5dygoOVzZocG+xWARpwNcIqAAAAvIY77ltt6ehWblG9shNCXV0K4FYIqwAAAPAa8WEByo4Pdat9q49sLFRDW5c+sTTd1aUAboWwCgAAAK+yIjNGHxXWqa3T5upS1NTepb9/UKCzsmM1L21iHmkEOAthFQAAAF5lRVasOrvt2lxY6+pS9PD6QtW3dunO87JcXQrgdgirAAAA8CqLM6Lk52PR2gOuXQrc2N6lf6wt0LnT4jU7JcKltQDuiLAKAAAArxLoZ9WijEiHN1kqqW/TFQ+s1+u7yoZ1/UPrDquxvVtfOzfToXUAnoKwCgAAAK9zRlas9lc06WhNq0Oe19lt1+2Pb9OOonrd+fQO7S5pGPT6htYu/WvtYV0wI14zk8MdUgPgaQirAAAA8DoXzUqUJL28s9Qhz/v5a/u0o6heP71ipqKD/fWFR7eoqqljwOv/ta5ATR3d+tq57FUFBkJYBQAAgNdJiQzSooxI/W97iUzTHNOzXt1Zpoc3FOqzp0/SLUvT9fdPLlBda6du+89WdXSf2nG4rqVTD60v1MWzEjUtMWxMYwOejLAKAAAAr3TZ3GQdrGzWvrKmUT+joKpZ33pup+alReieC3MkSTOSwvW7a+dq65E6/eB/e04Jw/9YW6CWzm7dwV5VYFCEVQAAAHili2clysdi6MXcklHd39Zp0/89vk2+VkMP3DRffj4ff2l98exEfeXsqXpqS5Ee2VB47PWa5g49vKFQl8xOUlZ86Fh/CoBHI6wCAADAK0UF+2llVqxe3lEqu33kS4F/8OJu7a9o0h+un6ukiMBT3r/z3CydNz1eP3l1n9bn93Qe/vvaArV32XTHOcyqYmIyDGOVYRj7DcPINwzjnn7eTzMM433DMLYbhrHTMIyLjnvv27337TcM44KhxiKsAgAAwGtdPjdJpQ3t+qiwdkT3Pf1RkZ7ZWqyvnDVVZ2bH9XuNxWLoD9fP1ZTYYP3f49u09UitHt1wRJfPTdbUuBBHlA+MK8MwrJIekHShpOmSbjQMY/pJl31P0tOmac6TdIOkv/TeO733xzMkrZL0l97nDYiwCgAAAK917rR4Bfpa9WLu8LsC7y1t1Pdf3K3Tp0brjiG6+Yb4++ifn1wkw5Cu/9smdXTb9JWzp461bMBVFkvKN02zwDTNTklPSrr8pGtMSX2dw8Il9f3hulzSk6ZpdpimeVhSfu/zBkRYBQAAgNcK9vfR+TPi9dquMnV224e8vrmjW7f/d5vCA3113/XzZLUYQ96TFh2kv9w0X6akq+anaHIss6pwaz6GYWw57uPW495LllR03I+Le1873o8k3WIYRrGk1yR9ZQT3nljIKIoHAAAAPMblc5P04o5SrT1YpXOmxQ967e/e2q/CmhY9+YWlig31H/YYp02N0XvfOEOJ4afubQXcTLdpmgvHcP+Nkh42TfN3hmEsk/SYYRgzR/MgZlYBAADg1VZkxioyyFf/2zH4UuCdxfV6ZEOhblmSriWTo0c8Tnp08Akdg4EJqERS6nE/Tul97Xifk/S0JJmmuVFSgKSYYd57Av60AAAAwKv5Wi26aFai3t5brpaO7n6v6bbZ9e3ndyk6xF93rcoe5woBt/GRpEzDMCYZhuGnnoZJL510zVFJ50iSYRjT1BNWq3qvu8EwDH/DMCZJypS0ebDBCKsAAADwelfMS1Z7l11v763o9/2HNxRqT2mjfnTpDIUF+I5zdYB7ME2zW9KXJb0paZ96uv7uMQzjXsMwLuu97BuSvmAYRq6kJyR92uyxRz0zrnslvSHpdtM0bYONZ5jm8M+UCg4ONltaWkb8kwIAAADcmd1uasWv31dWfIj+/ZkTG5SW1LfpvN+v0ZJJUXro04tkGEM3VQImKsMwWk3TDHZ1HRIzqwAAAIAsFkOXzknSBwerVdPccex10zT1wxd3y26auvfymQRVYBwRVgEAAABJV8xLks1u6rVdZcdee3NPhd7ZV6k7z81SalSQC6sDvA9hFQAAAJCUkxCm7PhQvdjbFbipvUs/emmPpiWG6bPLJ7m4OsD7EFYBAACAXpfNTdKWI3Uqqm3V7946oIqmdv38ypnytfJlMzDe+FMHAAAA9LpsTpIk6Zev5+mRjYX6xNJ0zUuLdHFVgHcirAIAAAC9UqOCtDA9Uq/uKlNsiL++eQFnqgKuQlgFAAAAjnPFvGRJ0g85UxVwKc5ZBQAAAI5js5vaXdKgOakRri4FGHfudM4qYRUAAAAAIMm9wirLgAEAAAAAboewCgAAAABwO4RVAAAAAIDbIawCAAAAANwOYRUAAAAA4HYIqwAAAAAAt0NYBQAAAAC4HcIqAAAAAMDtEFYBAAAAAG6HsAoAAAAAcDuEVQAAAACA2yGsAgAAAADcDmEVAAAAAOB2CKsAAAAAALdDWAUAAAAAuB3CKgAAAADA7RBWAQAAAABuh7AKAAAAAHA7hFUAAAAAgNshrAIAAAAA3I5hmubwLzYMu6Q255UzZj6Sul1dBCYkPncwGnzeYDT4vMFo8bmD/2/n3kIvG8M4jn9//cfkVMYpMTNCJpqUQ5NGJOFiMBkXcohI5EY5RMKNXLhQcoqUnEsOjYnJhRKKG5PDFMMQDWZGM2aKQaYc8rhYC3//w8x/9sWstXffT+32ft+9Lp6Lp2evZ+33fQdh3mhXbAeoqoO7DgR2sVntuyQfVNWiruPQ8DF3NAjzRoMwbzQoc0eDMG80zFwGLEmSJEnqHZtVSZIkSVLvjFqz+ljXAWhomTsahHmjQZg3GpS5o0GYNxpaI7VnVZIkSZI0Gkbtn1VJkiRJ0ggYmWY1yZIkXyT5KsltXcejfkoyP8nbST5L8mmSG9r5A5K8keTL9n3/rmNV/yQZS7I6yWvt+Mgkq9q682KS2V3HqP5JMifJ8iSfJ1mb5BRrjnYmyU3t79SaJM8n2dOao6kkeTLJliRrxs1NWWPSeKjNoY+TnNRd5NLOjUSzmmQMeAQ4B1gIXJpkYbdRqaf+BG6uqoXAYuC6NlduA96sqgXAm+1YmugGYO248T3A/VV1NPAjcHUnUanvHgRer6pjgeNpcsiao2klmQtcDyyqquOAMeASrDma2tPAkglz09WYc4AF7eta4NHdFKM0kJFoVoGTga+qal1V/Q68ACzrOCb1UFVtqqqP2s+/0Nw0zqXJl2fay54BLugkQPVWknnAecDj7TjAmcDy9hLzRpMk2Q84HXgCoKp+r6ptWHO0c7OAvZLMAvYGNmHN0RSq6h3ghwnT09WYZcCz1XgPmJPk0N0SqDSAUWlW5wIbxo03tnPStJIcAZwIrAIOqapN7VebgUO6iku99QBwK/BXOz4Q2FZVf7Zj646mciSwFXiqXUL+eJJ9sOZoB6rqO+BeYD1Nk/oT8CHWHM3cdDXGe2YNlVFpVqVdkmRf4GXgxqr6efx31RyR7THZ+leSpcCWqvqw61g0dGYBJwGPVtWJwK9MWPJrzdFE7f7CZTQPOw4D9mHyMk9pRqwxGmaj0qx+B8wfN57XzkmTJNmDplF9rqpWtNPf/7MMpn3f0lV86qVTgfOTfEOzzeBMmn2Ic9olemDd0dQ2AhuralU7Xk7TvFpztCNnA19X1daq+gNYQVOHrDmaqelqjPfMGiqj0qy+DyxoT8mbTXMIwcqOY1IPtfsMnwDWVtV9475aCVzZfr4SeHV3x6b+qqrbq2peVR1BU1/eqqrLgLeBC9vLzBtNUlWbgQ1JjmmnzgI+w5qjHVsPLE6yd/u79U/eWHM0U9PVmJXAFe2pwIuBn8YtF5Z6J83KgOGX5FyaPWVjwJNVdXe3EamPkpwGvAt8wn97D++g2bf6EnA48C1wUVVNPKxAIskZwC1VtTTJUTT/tB4ArAYur6rfOgxPPZTkBJqDuWYD64CraB4WW3M0rSR3ARfTnGK/GriGZm+hNUf/k+R54AzgIOB74E7gFaaoMe3Dj4dplpVvB66qqg86CFuakZFpViVJkiRJo2NUlgFLkiRJkkaIzaokSZIkqXdsViVJkiRJvWOzKkmSJEnqHZtVSZIkSVLv2KxKkiRJknrHZlWSJEmS1Ds2q5IkSZKk3vkbUWANiMt4EMsAAAAASUVORK5CYII="
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "source": [
    "ss = hu.ret_data"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "source": [
    "#统计高开票\n",
    "day_sel = pd.DataFrame(columns=['date','code'])\n",
    "for td in hu.trade_date_list:\n",
    "    th_day = td.strftime('%Y-%m-%d')\n",
    "    print(th_day)\n",
    "    select_sec_data = hu.trade_date_list_md_xd[hu.trade_date_list_md_xd.date==td]\n",
    "    groupby_code = select_sec_data.groupby(\"code\")\n",
    "    colums = ['code','pre_close','sort']\n",
    "    select_sec_data = pd.DataFrame(columns=colums)\n",
    "    for key in groupby_code.groups:\n",
    "        #从股票数据中查询今天是否交易\n",
    "        if key[0:1]=='3':\n",
    "            continue\n",
    "        if key[0:3]=='688':\n",
    "            continue\n",
    "        trade_date_list_info_c_key = hu.trade_date_list_md_xd[(hu.trade_date_list_md_xd.date<=td)&(hu.trade_date_list_md_xd.code==key)]\n",
    "        if len(trade_date_list_info_c_key)<2:\n",
    "            continue\n",
    "        np_p = trade_date_list_info_c_key.iloc[-1].open-trade_date_list_info_c_key.iloc[-2].close\n",
    "        compare_df_sum = trade_date_list_info_c_key.iloc[-2].close*0.05\n",
    "        compare_df_sum_a = round((np_p/trade_date_list_info_c_key.iloc[-2].close),2)*100\n",
    "        # print(compare_df_sum_a)\n",
    "        if compare_df_sum_a>5.0 and compare_df_sum_a<8.0:\n",
    "            select_sec_data.loc[select_sec_data.shape[0]] = {'code':key,'pre_close':0,'sort':compare_df_sum_a}\n",
    "    day_sel.loc[day_sel.shape[0]] = {'date':th_day,'code':select_sec_data['code'].tolist()}\n",
    "    select_sec_data = None\n",
    "day_sel"
   ],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "2021-07-01\n",
      "2021-07-02\n",
      "2021-07-05\n",
      "2021-07-06\n",
      "2021-07-07\n",
      "2021-07-08\n",
      "2021-07-09\n",
      "2021-07-12\n",
      "2021-07-13\n",
      "2021-07-14\n",
      "2021-07-15\n",
      "2021-07-16\n",
      "2021-07-19\n",
      "2021-07-20\n",
      "2021-07-21\n",
      "2021-07-22\n",
      "2021-07-23\n",
      "2021-07-26\n",
      "2021-07-27\n",
      "2021-07-28\n"
     ]
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "          date                                               code\n",
       "0   2021-07-01  [000062.XSHE, 002445.XSHE, 600460.XSHG, 601608...\n",
       "1   2021-07-02                         [000062.XSHE, 600993.XSHG]\n",
       "2   2021-07-05  [000915.XSHE, 002110.XSHE, 002192.XSHE, 002574...\n",
       "3   2021-07-06  [000953.XSHE, 002335.XSHE, 600160.XSHG, 603496...\n",
       "4   2021-07-07                                      [600803.XSHG]\n",
       "5   2021-07-08  [000786.XSHE, 002351.XSHE, 002887.XSHE, 600201...\n",
       "6   2021-07-09  [000017.XSHE, 600623.XSHG, 601101.XSHG, 603186...\n",
       "7   2021-07-12  [000063.XSHE, 002041.XSHE, 002240.XSHE, 002895...\n",
       "8   2021-07-13  [002620.XSHE, 600079.XSHG, 600338.XSHG, 600876...\n",
       "9   2021-07-14  [000657.XSHE, 002043.XSHE, 002309.XSHE, 002870...\n",
       "10  2021-07-15  [000720.XSHE, 000917.XSHE, 000977.XSHE, 002923...\n",
       "11  2021-07-16  [002140.XSHE, 002304.XSHE, 600284.XSHG, 600400...\n",
       "12  2021-07-19  [000506.XSHE, 002140.XSHE, 002201.XSHE, 002598...\n",
       "13  2021-07-20            [600463.XSHG, 600664.XSHG, 603456.XSHG]\n",
       "14  2021-07-21  [000506.XSHE, 000544.XSHE, 000572.XSHE, 002003...\n",
       "15  2021-07-22  [000718.XSHE, 000959.XSHE, 002119.XSHE, 002192...\n",
       "16  2021-07-23  [000572.XSHE, 000959.XSHE, 002176.XSHE, 002843...\n",
       "17  2021-07-26  [000821.XSHE, 002453.XSHE, 002795.XSHE, 003038...\n",
       "18  2021-07-27  [000630.XSHE, 002079.XSHE, 002121.XSHE, 002388...\n",
       "19  2021-07-28                                                 []"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>code</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-07-01</td>\n",
       "      <td>[000062.XSHE, 002445.XSHE, 600460.XSHG, 601608...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-07-02</td>\n",
       "      <td>[000062.XSHE, 600993.XSHG]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-07-05</td>\n",
       "      <td>[000915.XSHE, 002110.XSHE, 002192.XSHE, 002574...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-07-06</td>\n",
       "      <td>[000953.XSHE, 002335.XSHE, 600160.XSHG, 603496...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-07-07</td>\n",
       "      <td>[600803.XSHG]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-07-08</td>\n",
       "      <td>[000786.XSHE, 002351.XSHE, 002887.XSHE, 600201...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-07-09</td>\n",
       "      <td>[000017.XSHE, 600623.XSHG, 601101.XSHG, 603186...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2021-07-12</td>\n",
       "      <td>[000063.XSHE, 002041.XSHE, 002240.XSHE, 002895...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2021-07-13</td>\n",
       "      <td>[002620.XSHE, 600079.XSHG, 600338.XSHG, 600876...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2021-07-14</td>\n",
       "      <td>[000657.XSHE, 002043.XSHE, 002309.XSHE, 002870...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2021-07-15</td>\n",
       "      <td>[000720.XSHE, 000917.XSHE, 000977.XSHE, 002923...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2021-07-16</td>\n",
       "      <td>[002140.XSHE, 002304.XSHE, 600284.XSHG, 600400...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2021-07-19</td>\n",
       "      <td>[000506.XSHE, 002140.XSHE, 002201.XSHE, 002598...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2021-07-20</td>\n",
       "      <td>[600463.XSHG, 600664.XSHG, 603456.XSHG]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>2021-07-21</td>\n",
       "      <td>[000506.XSHE, 000544.XSHE, 000572.XSHE, 002003...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>2021-07-22</td>\n",
       "      <td>[000718.XSHE, 000959.XSHE, 002119.XSHE, 002192...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>2021-07-23</td>\n",
       "      <td>[000572.XSHE, 000959.XSHE, 002176.XSHE, 002843...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>2021-07-26</td>\n",
       "      <td>[000821.XSHE, 002453.XSHE, 002795.XSHE, 003038...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>2021-07-27</td>\n",
       "      <td>[000630.XSHE, 002079.XSHE, 002121.XSHE, 002388...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>2021-07-28</td>\n",
       "      <td>[]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "metadata": {},
     "execution_count": 25
    }
   ],
   "metadata": {
    "tags": []
   }
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "source": [],
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "auth success \n"
     ]
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "         date      open     close       high        low        volume  \\\n",
       "0  2021-07-30  3398.196  3378.986  3404.8813  3370.4506  2.974219e+10   \n",
       "\n",
       "          money  \n",
       "0  4.477391e+11  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>close</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>volume</th>\n",
       "      <th>money</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-07-30</td>\n",
       "      <td>3398.196</td>\n",
       "      <td>3378.986</td>\n",
       "      <td>3404.8813</td>\n",
       "      <td>3370.4506</td>\n",
       "      <td>2.974219e+10</td>\n",
       "      <td>4.477391e+11</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "metadata": {},
     "execution_count": 30
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [],
   "outputs": [],
   "metadata": {}
  }
 ],
 "metadata": {
  "kernelspec": {
   "name": "python3",
   "display_name": "Python 3.8.8 64-bit ('tf2': conda)"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  },
  "metadata": {
   "interpreter": {
    "hash": "b9349baf60296d31c1fc16cfd4f7454d7a12625f03dcdcca8738bf86ef65e21c"
   }
  },
  "orig_nbformat": 2,
  "interpreter": {
   "hash": "e5db5d54711345944680b78d99ed9c9e94f3933b005ce969e4b512f8ad2c4ab7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}